微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法在 pygame 上移动玩家

如何解决无法在 pygame 上移动玩家

我正在学习 pygame。我在移动时遇到了一个小问题,我不知道 如何让玩家移动。我不明白我的错误在哪里。你能帮我解决这个问题吗。如果你给我一些关于 pygame 的建议,我会非常感激。我是个新手

import pygame

widthSurface = 640
heightSurface = 480
keys = [False,False,False]
playerpos = [100,100]
vel = 5

# images
player = pygame.image.load('resources/images/dude.png')
grass = pygame.image.load('resources/images/grass.png')
castle = pygame.image.load('resources/images/castle.png')


def blitGrassAndCastle():
    for x in range(widthSurface // grass.get_width() + 1):
        for y in range(heightSurface // grass.get_height() + 1):
            surface.blit(grass,(x * grass.get_width(),y * grass.get_height()))
    surface.blit(castle,(0,30))
    surface.blit(castle,135))
    surface.blit(castle,240))
    surface.blit(castle,345))


if __name__ == '__main__':

    pygame.init()
    pressed = pygame.key.get_pressed()
    surface = pygame.display.set_mode((widthSurface,heightSurface))
    while True:
        pygame.time.delay(10)

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                exit(0)
                
        if pressed[pygame.K_LEFT]:
            playerpos[0] -= vel

        if pressed[pygame.K_RIGHT]:
            playerpos[0] += vel

        if pressed[pygame.K_UP]:
            playerpos[1] -= vel

        if pressed[pygame.K_DOWN]:
            playerpos[1] += vel

        blitGrassAndCastle()
        surface.blit(player,playerpos)

        pygame.display.update()

先谢谢你!

解决方法

pygame.key.get_pressed() 返回一个包含所有键盘按钮当前状态的列表。您需要在 ** 应用程序每帧循环中获取 ** 键的状态,而不是在循环之前一次。您在循环之前获得的状态永远不会改变。

if __name__ == '__main__':

    pygame.init()

    # pressed = pygame.key.get_pressed() # <-- DELETE

    surface = pygame.display.set_mode((widthSurface,heightSurface))
    while True:
        pygame.time.delay(10)

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                exit(0)

        pressed = pygame.key.get_pressed() # <--- INSERT
                
        if pressed[pygame.K_LEFT]:
            playerpos[0] -= vel

        if pressed[pygame.K_RIGHT]:
            playerpos[0] += vel

        if pressed[pygame.K_UP]:
            playerpos[1] -= vel

        if pressed[pygame.K_DOWN]:
            playerpos[1] += vel

        blitGrassAndCastle()
        surface.blit(player,playerpos)

        pygame.display.update()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。