首页 > 解决方案 > 为什么 Pygame 中的精灵现在没有绘制,它之前加载了?

问题描述

所以运行时我的代码中的“子弹(或laser.png)”精灵不会绘制。我在代码中破坏了一些东西,试图解决精灵留下痕迹的另一个问题。我尝试了多种方法,但最终破坏了我的代码(对不起,我是 pygame 的新手,无论如何这可能是一个愚蠢的问题)。我之前还定义了所有变量

def redrawGameWindow(win, HeroX,HeroY):
    win.blit(bg, (0,0))
    win.blit(HeroSprite, (HeroX, HeroY))
    win.blit(EnemySprite, (EnemyX, EnemyY))
    pygame.draw.rect(bg, (211,211,211), (430 - 5, 25 - 5, EnemyHealth + 10, 30 + 10))
    pygame.draw.rect(bg, (255,0,0), (430, 25, EnemyHealth, 30))
    pygame.draw.rect(bg, (211,211,211), (430 - 5, 665 - 5, EnemyHealth + 10, 30 + 10))
    pygame.draw.rect(bg, (0,255,0), (430, 665, PlayerHealth, 30))
    pygame.display.update()

def fire_bullet(x, y):
    global BulletState
    BulletState = "fire"
    win.blit(Laser, (BulletX,BulletY))


while GameRun:
    clock.tick(60)
    pressed = pygame.key.get_pressed()
    EnemyX += EnemyVel
    if EnemyX <= 0 :
        EnemyVel = 5
    elif EnemyX >= winX - 60:
        EnemyVel = -5
    if pressed[pygame.K_LEFT]:
        HeroX -= vel if HeroX > 0 else 0
    elif pressed[pygame.K_RIGHT]:
        HeroX += vel if HeroX < winX - 57 else 0

    if pressed[pygame.K_SPACE]:
        if BulletState == "ready" :
            BulletX =  HeroX
            fire_bullet(BulletX, BulletY)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            GameRun = False
    if BulletY <= 0:
        BulletY = HeroY
        BulletState = "ready"
    if BulletState == "fire":
        fire_bullet(BulletX, BulletY)
        BulletY -= BulletVel

    redrawGameWindow(win, HeroX, HeroY)

pygame.quit()

标签: pythonpygamesprite

解决方案


您正在调用fire_bullet绘制子弹的函数,但在更新显示之前,您正在调用redrawGameWindow覆盖所有内容的函数。


推荐阅读