【问题标题】:Cannot move player on pygame无法在pygame上移动玩家
【发布时间】:2021-03-25 00:07:17
【问题描述】:

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

import pygame

widthSurface = 640
heightSurface = 480
keys = [False, 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, (0, 135))
    surface.blit(castle, (0, 240))
    surface.blit(castle, (0, 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


    【解决方案1】:

    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()
    

    【讨论】:

    • 我读得太快了他写的一个想法event.key == pygame.K_...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-11
    • 1970-01-01
    • 1970-01-01
    • 2023-02-25
    • 1970-01-01
    相关资源
    最近更新 更多