如何在按住键时移动对象?

2024-09-30 02:15:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道这个问题可以看作是重复的,但我花了几个小时搜索并找出了我的代码中的错误。你知道吗

我的问题是,当按下左键或右键时,我的对象(称为player)不会不断移动:

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)

Tags: orkeyselfeventfalsetrueiftype
1条回答
网友
1楼 · 发布于 2024-09-30 02:15:22

我认为问题是你没有处理主游戏循环中的输入。你知道吗

在您的代码中,您似乎在处理对象Player的方法内部的输入。这不是处理输入的方式。在第二个代码示例中,有一个while True:循环,这意味着循环永远不会退出,因此方法的执行永远不会完成。我怀疑你的第一个例子中可能有类似的问题。你知道吗

相反,您应该:

  1. 创建所有对象和类。

  2. 编写主游戏循环。

主游戏循环应该处理输入,然后处理游戏的逻辑,然后呈现应该呈现的内容。你知道吗

下面是一个简短的代码示例。你知道吗

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

我希望这对你有帮助,如果你有任何进一步的问题,请随时张贴在下面的评论部分!你知道吗

相关问题 更多 >

    热门问题