You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyGame开发求助:游戏子弹无法在屏幕显示问题排查

子弹不显示的问题排查与修复

你的代码存在几个关键问题,直接导致子弹无法正常显示,以下是具体修复方案:

1. 射击输入检测完全失效

全局的userInput仅在程序启动时获取一次,后续不会更新,导致player.shoot()里的按键检测永远无法触发。需要在射击方法内实时获取输入:

def shoot(self):
    userInput = pygame.key.get_pressed()  # 实时获取当前按键状态
    if userInput[pygame.K_f]:
        # 调整子弹初始位置,避免与玩家精灵重叠
        bullet_x = self.x + self.image.get_width()//2 - bullet_sprite.get_width()//2
        bullet_y = self.y - bullet_sprite.get_height()
        bullet = Bullet(bullet_x, bullet_y, bullet_sprite)
        self.bullets.append(bullet)
    for bullet in self.bullets:
        bullet.move()

2. Bullet类缺少核心移动方法

你在shoot中调用了bullet.move(),但Bullet类未实现该方法,子弹无法移动且初始位置与玩家重叠,自然看不到。补充移动逻辑:

class Bullet:
    def __init__(self, x, y, img):
        self.image = img
        self.x = x
        self.y = y
        self.vel = -10  # 子弹向上飞行的速度

    def draw_self(self):
        gameDisplay.blit(self.image, (self.x, self.y))
    
    def move(self):
        self.y += self.vel
        # 移除超出屏幕的子弹,释放资源
        if self.y < -self.image.get_height():
            player.bullets.remove(self)

3. draw_game函数存在方法调用错误

draw_game里调用了bullet.draw_bullet(),但Bullet类的绘制方法是draw_self,会抛出AttributeError导致子弹绘制失败。同时player.update()已经包含子弹绘制,无需重复操作:

def draw_game():
    gameDisplay.fill(black)
    pygame.display.update()

4. 主循环绘制逻辑冗余混乱

主循环中重复调用player.draw_bullets()和多次pygame.display.update(),容易导致绘制顺序错乱。优化后主循环:

while not gameExit:
    for event in pygame.event.get():
        if event.type == pygame.QUIT or (event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE):
            gameExit = True

    draw_game()
    player.shoot()
    player.update()
    enemy.uptade()  # 建议拼写修正为update
    
    pygame.display.update()
    clock.tick(60)

额外优化点

  • Enemy类的uptade方法拼写错误,修正为update后,内部需用self替代全局enemy实例:
def update(self):
    self.draw_self()
    self.movement()

完成以上修改后,子弹即可正常显示并向上飞行。

内容的提问来源于stack exchange,提问作者Sofia Dias

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 21:53:35