我尝试使用类似的东西,但它不起作用。
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
关于python - 如何通过按住按钮来移动 pygame 中的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42682309/