簡體   English   中英

按住鍵時如何移動對象?

[英]How to move an object when a key is held down?

我知道這個問題可以看作是重復的問題,但是我花了幾個小時來搜索並弄清楚我的代碼有什么問題。

我的問題是,按住鼠標左鍵或右鍵時,稱為播放器的對象不會持續移動:

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)

我認為問題在於您沒有在主游戲循環中處理輸入。

在您的代碼中,您似乎正在處理對象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

希望對您有所幫助,如果還有其他問題,請隨時在下面的評論部分中發表!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM