如何解决在 pygame 中按键不能正确移动精灵,奇怪的行为
所以我一直在用 pygame 进行实验,我可以绘制我的精灵,但是当我按下 WASD 时,我必须多次按下它们,而精灵所做的只是向下和左右移动,没有真正的控制
我更新了精灵类中的 self.rect
,当你按下一个键时,它会清除屏幕,并且应该使用不同的 x y 位置重新绘制精灵。
代码如下:
import pygame
pygame.init()
screen = pygame.display.set_mode((750,750))
BLACK = (0,0)
WHITE = (255,255,255)
RED = (255,0)
class Sprite(pygame.sprite.Sprite):
def __init__(self,pos):
super(Sprite,self).__init__()
self.image = demon
self.rect = self.image.get_rect(center = pos)
def update(self,moveX,moveY):
self.rect.x += moveX
self.rect.y += moveY
all_sprites_list = pygame.sprite.Group()
demon = pygame.image.load("C:/programming/doomman/cacodemon.png").convert_alpha()
x = 300
y = 300
my_sprite = Sprite((x,y))
all_sprites_list.add(my_sprite)
clock = pygame.time.Clock()
pygame.display.set_caption("Demon Dance")
carryOn = True
while carryOn == True:
keys = pygame.key.get_pressed()
for event in pygame.event.get():
if event.type==pygame.QUIT:
carryOn=False
elif event.type == pygame.KEYDOWN:
screen.fill(BLACK)
if keys[pygame.K_w]:
my_sprite.update(50,0)
if keys[pygame.K_s]:
my_sprite.update(-50,0)
if keys[pygame.K_d]:
my_sprite.update(0,50)
if keys[pygame.K_a]:
my_sprite.update(0,50)
pygame.display.flip()
clock.tick(60)
all_sprites_list.draw(screen)
解决方法
pygame.key.get_pressed()
返回一个包含所有键盘按钮状态的列表。这不是为了获取键盘事件的键。按下的键可以从 pygame.event.Event
对象的 key
属性获取:
while carryOn == True:
# [...]
for event in pygame.event.get():
if event.type==pygame.QUIT:
carryOn=False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_w:
my_sprite.update(50,0)
if event.key == pygame.K_s:
my_sprite.update(-50,0)
if event.key == pygame.K_d:
my_sprite.update(0,50)
if event.key == pygame.K_a:
my_sprite.update(0,50)
# [...]
键盘事件(参见 pygame.event 模块)仅在键的状态改变时发生一次。 KEYDOWN
事件在每次按下键时发生一次。 KEYUP
每次释放键时出现一次。将键盘事件用于单个操作或逐步移动。
pygame.key.get_pressed()
返回一个包含所有键盘按钮状态的列表。这不是为了获取键盘事件的键。按下的键可以从 pygame.event.Event
对象的 key
属性中获取。
但是,您必须在应用程序循环而不是事件循环中评估键:
while carryOn == True:
for event in pygame.event.get():
if event.type==pygame.QUIT:
carryOn=False
keys = pygame.key.get_pressed()
if keys[pygame.K_w]:
my_sprite.update(50,0)
if keys[pygame.K_s]:
my_sprite.update(-50,0)
if keys[pygame.K_d]:
my_sprite.update(0,50)
if keys[pygame.K_a]:
my_sprite.update(0,50)
# [...]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。