我知道这个问题可以看作是重复的,但我花了几个小时搜索并弄清楚我的代码出了什么问题。
我的问题是,当按下左或右键时,我的对象(称为播放器)不会一直移动:
for event in pygame.event.get():
if event.type == QUIT:
self.terminate()
if event.type == KEYDOWN:
if event.key == K_ESCAPE:
self.terminate()
if event.key == K_LEFT or event.key == K_a:
self.moveRight = False
self.moveLeft = True
if event.key == K_RIGHT or event.key == K_d:
self.moveLeft = False
self.moveRight = True
if event.type == KEYUP:
if event.key == K_LEFT or event.key == K_a:
self.moveLeft = False
if event.key == K_RIGHT or event.key == K_d:
self.moveRight = False
# Move the player around
if self.moveLeft :
# Moves the player object to left with self.PLAYERMOVERATE pixels.
self.player.setLeftRight(-1 * self.PLAYERMOVERATE)
if self.moveRight :
self.player.setLeftRight(self.PLAYERMOVERATE)
我也试过这个替代方案:
while True:
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
self.player.setLeftRight(-1 * self.PLAYERMOVERATE)
if keys[pygame.K_RIGHT]:
self.player.setLeftRight(self.PLAYERMOVERATE)
答案 0 :(得分:0)
我认为问题在于你没有在主游戏循环中处理输入。
在您的代码中,您似乎正在处理对象Player
的方法内的输入。这不是应该如何处理输入。在你的第二个代码示例中,有一个while True:
循环,这意味着循环永远不会退出,因此方法的执行永远不会完成。我怀疑你的第一个例子中可能存在类似的问题。
相反,你应该:
创建所有对象和类。
写下主游戏循环。
主游戏循环应该处理输入,然后处理游戏的逻辑,然后渲染任何应该渲染的内容。
这是一个简短的代码示例。
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit() # Exit from pygame window
quit() # End python thread
if event.type == KEYDOWN:
if event.key == K_LEFT or event.key == K_a:
player.moveRight = False
player.moveLeft = True
if event.key == K_RIGHT or event.key == K_d:
player.moveLeft = False
player.moveRight = True
if event.type == KEYUP:
if event.key == K_LEFT or event.key == K_a:
player.moveLeft = False
if event.key == K_RIGHT or event.key == K_d:
player.moveRight = False
# Move player using method
if player.moveLeft:
# Move player
# ...
# Render player
我希望这对您有所帮助,如果您有任何其他问题,请随时在下面的评论部分发布!