Pygame开发小游戏时精灵无法显示仅出现黑线,如何修复代码问题?
Pygame精灵不显示问题修复方案
以下是你代码里的错误点和对应修复方法:
- 精灵透明无法显示:你在Player类中先将精灵surface填充为灰色,又将colorkey(透明色)设为灰色,导致整个精灵完全透明,自然看不见。同时后续又在surface上绘制和底色一致的灰色矩形,属于无效操作。
- update方法无效:你定义的update是全局函数,pygame的精灵组调用update()时只会执行每个精灵类自身的update方法,你写的全局update不会被触发,精灵位置无法正常更新。
- 移动逻辑错误:
Xcord =+ 50是错误的累加写法,等价于每次给Xcord赋值为50,不会递增;后续判断重置位置时用了Xcord == 0,这是相等判断语句,不是赋值语句,无法重置坐标。 - 冗余代码:存在重复导入pygame、time,重复定义all_sprites_list、grey变量的问题,虽然不影响运行但属于不必要的冗余。
- 补充:你绘制的底部黑线线宽75,坐标从y=500上下延伸,你设置的精灵y坐标为400,50px高的精灵底部为450,刚好在黑线上方,不会被遮挡。
修复后完整代码
import pygame, random, time # 全局变量定义 Xcord = 0 grey = (192, 192, 192) Color_line = (0, 0, 0) playerWidth = 50 playerHeight = 50 # 初始化pygame pygame.init() screen = pygame.display.set_mode([1000, 500]) all_sprites_list = pygame.sprite.Group() class Player(pygame.sprite.Sprite): def __init__(self, color, width, height): super().__init__() # 生成精灵图像,不需要设置透明色 self.image = pygame.Surface([width, height]) self.image.fill(color) self.rect = self.image.get_rect() # 把update方法写在精灵类内部 def update(self): self.rect.x = Xcord self.rect.y = 400 # 实例化精灵加入组 player = Player(grey, playerWidth, playerHeight) all_sprites_list.add(player) running = True while running: # 事件监听 for event in pygame.event.get(): if event.type == pygame.QUIT: running = False # 填充背景 screen.fill((255, 255, 255)) # 更新精灵 all_sprites_list.update() # 绘制地面线 pygame.draw.line(screen, Color_line, (0, 500), (1000, 500), 75) # 绘制所有精灵 all_sprites_list.draw(screen) # 刷新屏幕 pygame.display.flip() # 修正移动逻辑 Xcord += 50 if Xcord >= 400: Xcord = 0 pygame.quit()
运行修复后代码可以看到灰色方块精灵在屏幕上向右移动,到x坐标400的位置重置到左侧,和你预期的小恐龙基础移动逻辑一致,后续你可以继续添加跳跃、障碍物等逻辑。
内容的提问来源于stack exchange,提问作者Pixeled
相关产品推荐
相关产品推荐

