![](/img/trans.png)
[英]I can't get my 'player' to move to move both ways in pygame, how do i do it?
[英]How do I get my object in pygame to move by holding the button?
我嘗試使用這樣的東西,但它沒有用。
while running:
keys = pygame.key.get_pressed() #checking pressed keys
if keys[pygame.K_UP]:
y1 -= 1
if keys[pygame.K_DOWN]:
y1 += 1
這是我目前的代碼。 我嘗試使用不同的方法,因為上述方法對我不起作用。 它一次按下一個按鈕。
import pygame
spaceX = 100
spaceY = 100
pygame.init
black = (0,0,0)
size = (800, 800)
screen = pygame.display.set_mode(size)
def game(spaceX, spaceY):
spaceship_file = 'spaceship.png'
spaceship_image = pygame.image.load(spaceship_file)
spaceship = pygame.transform.scale(spaceship_image, (30, 30))
screen.fill(black)
screen.blit(spaceship, (spaceX, spaceY))
pygame.display.flip()
while True:
for event2 in pygame.event.get():
if event2.type == pygame.KEYDOWN and event2.key == pygame.K_LEFT:
spaceX2 = spaceX - 5
game(spaceX2, spaceY)
elif event2.type == pygame.KEYDOWN and event2.key == pygame.K_RIGHT:
spaceX2 = spaceX + 5
game(spaceX2, spaceY)
game(spaceX, spaceY)
編輯:
我現在有這個代碼。 我的對象仍然只在我反復點擊按鈕時移動,而不是在我按住它時移動。
def game(spaceX, spaceY):
while True:
screen.fill(black)
screen.blit(spaceship, (spaceX, spaceY))
pygame.display.flip()
keys = pygame.key.get_pressed()
for event in pygame.event.get():
if keys[pygame.K_LEFT]:
spaceX = spaceX - 5
game(spaceX, spaceY)
elif keys[pygame.K_RIGHT]:
spaceX = spaceX + 5
game(spaceX, spaceY)
有兩種方法可以檢查密鑰輸入,無論它們是在事件隊列中還是檢查它們的當前狀態。
當按下或重新按下按鍵時,它們會被放入事件隊列中,因此您無法直接判斷按鍵是否被保留。 有兩種方法:
在進入主循環之前調用pygame.key.set_repeat(True)
。 這將重復將KEYDOWN事件放入事件隊列中,只要它被保持。
引入速度變量。 當用戶按下鍵時將速度設置為某個速度,並在用戶抬起鍵時將速度設置為0。
例如:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
velocity_x = -5
elif event.key == pygame.K_RIGHT:
velocity_x = 5
elif event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT:
velocity_x = 0
elif event.key == pygame.K_RIGHT:
velocity_x = 0
position_x += velocity_x
通過調用pygame.key.get_pressed()
獲得鍵的當前狀態。 你必須調用pygame.event
中的一個函數,以便pygame執行一些必需的內部操作,所以如果你不想使用事件隊列,請使用pygame.event.pump()
。 如果不這樣做,你的操作系統會認為pygame已經崩潰,導致游戲沒有響應。 雖然,您通常希望處理pygame.QUIT
事件,因此用戶可以退出。
pygame.event.pump()
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
position_x -= 5
elif keys[pygame.K_RIGHT]:
position_x += 5
這個問題的一個解決方案是使用set_repeat
函數
pygame.key.set_repeat(True)
這將生成多個KEYDOWN
事件。
嘗試將鍵添加到你的pygame for循環中。 所以看起來應該是這樣的......
while running:
for event in pygame.event.get():
keys = pygame.key.get_pressed() #checking pressed keys
if keys[pygame.K_UP]:
y1 -= 1
if keys[pygame.K_DOWN]:
y1 += 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.