按住不工作的键时移动精灵
moving a sprite while holding down a key not working
所以我试着让我的精灵在按住箭头键时不断移动,但我需要一直按住它才能移动它。知道为什么吗?
这是我的代码:
是的,我已经导入了 pygame 和所有内容
class Block(pygame.sprite.Sprite):
def __init__(self, color = blue,widht = 64, height = 64):
super(Block, self).__init__()
self.image = pygame.Surface((widht, height))
self.image.fill(color)
self.rect = self.image.get_rect()
self.sound = pygame.mixer.Sound("2dSounds/Walk.wav")
self.hspeed = 0
self.vspeed = 0
更新精灵,所以它会根据我按下的键改变位置
def update(self):
self.rect.x += self.hspeed
self.rect.y += self.vspeed
使用 a_block.change_speed(...)
改变速度
def change_speed(self, hspeed, vspeed):
self.hspeed += hspeed
self.vspeed += vspeed
第一次创建时设置精灵的位置
def set_position(self, x, y):
self.rect.x = x
self.rect.y = y
为我刚刚创建的精灵设置图像
def set_image(self, filename = None):
if(filename != None):
self.image = pygame.image.load(filename)
self.rect = self.image.get_rect()
播放声音
def play_sound():
self.sound.play()
游戏循环
def game_loop():
a_block = Block()
global event
gameDisplay.fill(white)
#Quit
gameExit = False
while not gameExit:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
不起作用的控件
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
a_block.change_speed(-20, 0)
if event.key == pygame.K_RIGHT:
a_block.change_speed(20, 0)
if event.key == pygame.K_UP:
a_block.change_speed(0, -20)
if event.key == pygame.K_DOWN:
a_block.change_speed(0, 20)
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT:
a_block.change_speed(0, 0)
if event.key == pygame.K_RIGHT:
a_block.change_speed(0, 0)
if event.key == pygame.K_UP:
a_block.change_speed(0, 0)
if event.key == pygame.K_DOWN:
a_block.change_speed(0, 0)
画画a_block和其他东西
block_group = pygame.sprite.Group()
gameDisplay.fill(white)
a_block.set_image('2dImages/brick.png')
a_block.set_position(display_width/2, display_height/2)
a_block.update()
block_group.add(a_block)
block_group.draw(gameDisplay)
更新显示
pygame.display.update()
clock.tick(60)
提前致谢!!
在您的代码开头(但在您调用 pygame.init()
之后),添加以下代码行:
pygame.key.set_repeat(10)
这将每 10 毫秒将 post 键盘事件发送到事件队列,即使按键已经被按下也是如此。
所以我试着让我的精灵在按住箭头键时不断移动,但我需要一直按住它才能移动它。知道为什么吗? 这是我的代码:
是的,我已经导入了 pygame 和所有内容
class Block(pygame.sprite.Sprite):
def __init__(self, color = blue,widht = 64, height = 64):
super(Block, self).__init__()
self.image = pygame.Surface((widht, height))
self.image.fill(color)
self.rect = self.image.get_rect()
self.sound = pygame.mixer.Sound("2dSounds/Walk.wav")
self.hspeed = 0
self.vspeed = 0
更新精灵,所以它会根据我按下的键改变位置
def update(self):
self.rect.x += self.hspeed
self.rect.y += self.vspeed
使用 a_block.change_speed(...)
改变速度 def change_speed(self, hspeed, vspeed):
self.hspeed += hspeed
self.vspeed += vspeed
第一次创建时设置精灵的位置
def set_position(self, x, y):
self.rect.x = x
self.rect.y = y
为我刚刚创建的精灵设置图像
def set_image(self, filename = None):
if(filename != None):
self.image = pygame.image.load(filename)
self.rect = self.image.get_rect()
播放声音
def play_sound():
self.sound.play()
游戏循环
def game_loop():
a_block = Block()
global event
gameDisplay.fill(white)
#Quit
gameExit = False
while not gameExit:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
不起作用的控件
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
a_block.change_speed(-20, 0)
if event.key == pygame.K_RIGHT:
a_block.change_speed(20, 0)
if event.key == pygame.K_UP:
a_block.change_speed(0, -20)
if event.key == pygame.K_DOWN:
a_block.change_speed(0, 20)
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT:
a_block.change_speed(0, 0)
if event.key == pygame.K_RIGHT:
a_block.change_speed(0, 0)
if event.key == pygame.K_UP:
a_block.change_speed(0, 0)
if event.key == pygame.K_DOWN:
a_block.change_speed(0, 0)
画画a_block和其他东西
block_group = pygame.sprite.Group()
gameDisplay.fill(white)
a_block.set_image('2dImages/brick.png')
a_block.set_position(display_width/2, display_height/2)
a_block.update()
block_group.add(a_block)
block_group.draw(gameDisplay)
更新显示
pygame.display.update()
clock.tick(60)
提前致谢!!
在您的代码开头(但在您调用 pygame.init()
之后),添加以下代码行:
pygame.key.set_repeat(10)
这将每 10 毫秒将 post 键盘事件发送到事件队列,即使按键已经被按下也是如此。