我正在做一件简单的事情,并且一直在关注youtube上的一个教程。我有能力用WASD移动女妖(我用了Halo中的一张图片作为我的飞船),但是我必须重复地敲击按键,而我希望能够通过按住按键来移动它。下面是代码;
import pygame
from pygame.locals import *
pygame.init()
screen = pygame.display.set_mode((1440,900))
pygame.display.update()
black=(0,0,0)
white=(255,255,255)
## loads the background
background = pygame.image.load("G:/starfield.jpg")
### loads sprite of a spaceship that will move.
banshee = pygame.image.load("G:/banshee.png")
x=1
y=1
while True:
gamexit = False
while not gamexit:
screen.blit(background,(0,0))
screen.blit(banshee,(x,y))
pygame.display.update()
# if it touches the sides of the window, the window closes
if x==1440 or x==0 or y==900 or y==0:
pygame.quit()
quit()
else:
for event in pygame.event.get():
pressed= pygame.key.get_pressed()
if event.type == pygame.QUIT:
gamexit=True
pygame.quit()
quit()
elif event.type==KEYDOWN:
# moves banshee up if w pressed, same for the other WASD keys below
if event.key==K_w:
y=y-5
x=x
screen.blit(banshee,(x,y))
pygame.display.update()
elif event.key==K_a:
x=x-5
y=y
screen.blit(banshee,(x,y))
pygame.display.update()
elif event.key==K_d:
x=x+5
y=y
screen.blit(banshee,(x,y))
pygame.display.update()
elif event.key==K_s:
y=y+5
x=x
screen.blit(banshee,(x,y))
pygame.display.update()
我已经尝试了许多不同的方法来做这件事(在这里和其他地方),但收效甚微。有什么我可以在这里做的,而不需要重写一大段代码?
- 谢谢-谢谢
2条答案
按热度按时间vmjh9lq91#
使用
pygame.key.get_pressed()
来检查某个键是否被按下要容易得多,因为您不需要自己通过事件来跟踪键的状态。我通常创建一个字典,将键Map到它们应该移动对象的方向。
这样,查询
pygame.key.get_pressed()
的结果就很容易了。您可以使用一些简单的矢量数学来规范化移动方向,这样您就可以以与仅沿着x或y轴相同的速度沿对角线移动。
此外,使用
Rect
来存储对象的位置也更容易,因为pygame提供了许多与Rect
类一起工作的有用函数。z31licg02#
首先,尝试添加变量
dx
和dy
来存储密钥的状态