首页 > 解决方案 > 如何让 pygame 显示我的精灵?

问题描述

我不确定问题出在哪里,或者是否需要更多代码来查看问题所在

这就是我调用精灵的方式:

walkRight = [pygame.image.load('sprites/R1.png'), pygame.image.load('sprites/R2.png'), pygame.image.load('sprites/R3.png'), pygame.image.load('sprites/R4.png'), pygame.image.load('sprites/R5.png'), pygame.image.load('sprites/R6.png'), pygame.image.load('sprites/R7.png'), pygame.image.load('sprites/R8.png'), ]
walkLeft = [pygame.image.load('sprites/L1.png'), pygame.image.load('sprites/L2.png'), pygame.image.load('sprites/L3.png'), pygame.image.load('sprites/L4.png'), pygame.image.load('sprites/L5.png'), pygame.image.load('sprites/L6.png'), pygame.image.load('sprites/L7.png'), pygame.image.load('sprites/L8.png')]
bg = pygame.image.load('sprites/bg.jpg')
char = pygame.image.load('sprites/standing.png')

所有文件都在文件夹中 Gmaepy拼写是故意在该文件夹中包含 main.py 并且有一个包含所有精灵的 sprites 文件夹。我想它可能在我的 redrawGameWindow() 函数中,但我仍然不熟悉这一切

def redrawGameWindow():
    # We have 8 images for our walking animation, I want to show the same image for 3 frames
    # so I use the number 16 as an upper bound for walkCount because 24 / 3 = 8. 8 images shown
    # 3 times each animation.
    global walkCount

    win.blit(bg, (0, 0)) # Draws the background image at (0,0)
    if walkCount + 1 >= 24:
        walkCount = 0

        if left:
            win.blit(walkLeft[walkCount//3], (x, y))
            walkCount += 1
        elif right:
            win.blit(walkRight[walkCount//3], (x, y))
            walkCount += 1
        else:
            win.blit(char, (x, y))
            walkCount = 0

    pygame.display.update()

当我在 powershell 中运行程序时,会显示背景,但看不到角色精灵。当我显示一个矩形时它工作正常,但我遇到了精灵问题

标签: pythonpygame

解决方案


这是一个缩进的问题。在任何情况下,您都必须blit使用精灵:

def redrawGameWindow():
    # We have 8 images for our walking animation, I want to show the same image for 3 frames
    # so I use the number 16 as an upper bound for walkCount because 24 / 3 = 8. 8 images shown
    # 3 times each animation.
    global walkCount

    win.blit(bg, (0, 0)) # Draws the background image at (0,0)
    if walkCount + 1 >= 24:
        walkCount = 0

    # INDENTAITON
    #<--|

    if left:
        win.blit(walkLeft[walkCount//3], (x, y))
        walkCount += 1
    elif right:
        win.blit(walkRight[walkCount//3], (x, y))
        walkCount += 1
    else:
        win.blit(char, (x, y))
        walkCount = 0

    pygame.d

推荐阅读