Python 按空格键时使精灵出现,X秒后消失?
好的,我用pygame做了一个游戏。游戏是这样的:屏幕底部有一个人向上射击,击中敌人。这个人可以左右移动 要拍摄你,请按空格键 当你开枪的时候,我想让一个小精灵出现在枪管的末端,这样看起来火焰就像真的枪声一样冒出来 我已经设法让火精灵在按下空格键时出现,但我也想让火精灵在大约0.3秒后消失(一旦消失,我会调整时间) 我该怎么做呢?我觉得在这里有点迷路 我试着用谷歌搜索stackoverflow,但我找不到我需要的东西 game.pyPython 按空格键时使精灵出现,X秒后消失?,python,image,pygame,sprite,Python,Image,Pygame,Sprite,好的,我用pygame做了一个游戏。游戏是这样的:屏幕底部有一个人向上射击,击中敌人。这个人可以左右移动 要拍摄你,请按空格键 当你开枪的时候,我想让一个小精灵出现在枪管的末端,这样看起来火焰就像真的枪声一样冒出来 我已经设法让火精灵在按下空格键时出现,但我也想让火精灵在大约0.3秒后消失(一旦消失,我会调整时间) 我该怎么做呢?我觉得在这里有点迷路 我试着用谷歌搜索stackoverflow,但我找不到我需要的东西 game.py # -- SNIP -- def run_game():
# -- SNIP --
def run_game():
# -- SNIP ---
# Start the main loop for the game.
while True:
# Watch for keyboard and mouse events.
gf.check_events(ai_settings, screen, stats, sb, play_button, man,
enemies, bullets)
if stats.game_active:
man.update()
gf.update_bullets(ai_settings, screen, stats, sb, man, enemies,
bullets)
gf.update_enemies(ai_settings, stats, screen, sb, man, enemies,
bullets)
gf.update_screen(ai_settings, screen, stats, sb, man, enemies,
bullets, play_button)
run_game()
game_functions.py
# -- SNIP --
def check_events(ai_settings, screen, stats, sb, play_button, man, enemies,
bullets):
"""Respond to keypresses and mouse events."""
# -- SNIP --
elif event.type == pygame.KEYDOWN:
check_keydown_events(event, ai_settings, screen, stats, sb, man,
enemies, bullets)
# -- SNIP --
def check_keydown_events(event, ai_settings, screen, stats, sb, man, enemies, bullets):
"""Respond to key presses."""
if event.key == pygame.K_RIGHT:
man.moving_right = True
man.orientation = "Right"
elif event.key == pygame.K_LEFT:
man.moving_left = True
man.orientation = "Left"
# Draw sprite if space is pressed
elif event.key == pygame.K_SPACE:
fire_bullet(ai_settings, bullets, screen, man)
man.fire_screen.blit(man.fire, man.fire_rect)
# --- SNIP ---
# -- SNIP --
男人
class Man(Sprite):
# -- SNIP --
# Load the man image and get its rect.
self.image = pygame.image.load('images/man_gun_large.bmp')
self.rect = self.image.get_rect()
self.screen_rect = screen.get_rect()
# Gun fire sprite
self.fire = pygame.image.load('images/fire.bmp')
self.fire_rect = self.fire.get_rect()
self.screen_fire_rect = self.image.get_rect()
self.fire_screen = self.image
self.ai_settings = ai_settings
# Start each new man at the bottom center of the screen.
self.rect.centerx = self.screen_rect.centerx
self.rect.bottom = self.screen_rect.bottom
# Load the fire sprite at the end of the mans gunbarrel
self.fire_rect.centerx = self.screen_fire_rect.left + 20
self.fire_rect.top = self.screen_fire_rect.top
# ---SNIP---
# Movement flags
self.moving_right = False
self.moving_left = False
self.orientation = False
def blitme(self):
"""Draw the man at its current location."""
self.screen.blit(self.image, self.rect)
if self.orientation == "Right":
self.screen.blit(self.image, self.rect)
elif self.orientation == "Left":
self.screen.blit(pygame.transform.flip(self.image, True, False), self.rect)
用于管理项目符号的生命周期
添加一个列表,其中包含项目符号的生命结束时间元组和项目符号本身
项目符号=[]
生成项目符号后,计算结束时间并将信息附加到列表中:
def check_keydown_事件(事件、ai_设置、屏幕、统计、sb、人、敌人、子弹):
# [...]
#如果按空格键,则绘制精灵
elif event.key==pygame.K_空间:
项目符号=#[…]
end_time=pygame.time.get_ticks()+300#300毫秒循环=0.3秒
项目符号。追加((结束时间,项目符号))
检查子弹是否已达到寿命终点,并决定是否保留该子弹:
current\u time=pygame.time.get\u ticks()
当前项目符号=项目符号
项目符号=[]
对于结束时间,当前项目符号中的项目符号:
如果当前时间>结束时间:
子弹
其他:
项目符号。追加((结束时间,项目符号))
你想一次射出多发子弹吗?这些子弹应该在一段时间后“消失”吗?我有了它,现在我可以“一次”射出3发子弹了。我能射3颗子弹,当其中一颗子弹击中敌人或离开屏幕时,我就能射下一颗子弹,长话短说,我只能同时在屏幕上显示3个项目符号。但我想要的是,当我按下spacesee时,会显示一个精灵X amount的时间,这似乎真的是一个很好的方法,可以用来导致指定的pygame.USEREVENT
在所需的延迟后生成,该延迟指示时间段已经过去。然后可以在主事件处理循环中检查此事件,并使精灵消失。