[英]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:
循環,這意味着該循環永遠不會退出,因此該方法的執行永遠不會完成。 我懷疑您的第一個示例中可能存在類似的問題。
相反,您應該:
創建所有對象和類。
編寫主游戲循環。
游戲主循環應處理輸入,然后處理游戲邏輯,然后渲染應渲染的內容。
這是一個簡短的代碼示例。
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.