问题描述
我正在学习 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()