【发布时间】:2017-07-29 16:03:04
【问题描述】:
我尝试使用类似的东西,但它不起作用。
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)
【问题讨论】:
-
不要在游戏循环中使用递归调用。 Python 在引发错误之前已将递归调用限制为 1000 次。您可以更改此限制,但更好的方法是将
screen.fill(black)、screen.blit(spaceship, (spaceX, spaceY))和pygame.display.flip()放入while True循环中。这样您也不会在每次移动飞船时加载图像并对其进行缩放。 -
你说“它没有用”是什么意思?因为它应该工作得很好。我以前多次使用完全相同的代码。
-
我的意思是我之前尝试过使用 pygame.key.get_pressed() 而不是 pygame.KEYDOWN 但它不起作用。
-
我的意思是你有没有得到一个错误,当你按下按钮时它没有注册,它是否有效但不是你想要完成的,等等?因为如果所有逻辑都是正确的,它应该可以工作,并且它是做你想做的事情的最简单的方法之一。或者你可以引入一个速度变量,在每个循环中添加到位置。
-
我用一些编辑过的代码编辑了我的帖子。我确实让 pygame.key.get_pressed() 工作,但它仍然一次只能移动 1 个按键。似乎没有弹出错误。
标签: python python-2.7 pygame