我在Pygame制作游戏Space Invaders,我想让敌人随机射击玩家。此时我只能按下标签按钮让敌人向玩家射击。但它应该自动并以随机间隔执行此操作。如何在不需要按Tab键的情况下实现此功能。 谢谢。
ReceiptNo Average
_________________________
1 10.00
2 7.50
3 8.86
答案 0 :(得分:0)
您需要一个随机定时器变量,您可以按每帧dt
(增量时间)递减。当它低于零时,创建一个项目符号实例,将其添加到组中并重置计时器。我在这里使用random.uniform
函数给你一个浮点数,但如果你想要整数,你也可以使用random.randrange
或randint
。要获得增量时间(自上次滴答以来的时间),只需指定clock.tick(fps)
返回变量的值。
# The timer is the time in seconds until the enemy shoots.
timer = random.uniform(2, 6) # Random float between 2 and 6.
dt = 0
running = True
while True:
# Event handling omitted.
# Decrease the timer by the delta time.
timer -= dt
if timer <= 0: # Ready to fire.
# Pick a random enemy to get the x and y coords.
random_enemy = random.choice(enemy.sprites())
enemy_x, enemy_y = random_enemy.rect.center
# Create a bullet and add it to the sprite groups.
bullet = BulletEnemy(enemy_x, enemy_y)
allSprites.add(bullet)
enemy.add(bullet)
timer = random.uniform(2, 6) # Reset the timer.
# Collision detection and drawing omitted.
# clock.tick returns the time that has passed since the last frame.
dt = clock.tick(60) / 1000 # / 1000 to convert it to seconds.
答案 1 :(得分:0)
一种方法是创建自定义事件并根据某些条件触发它,例如时间。
您可以使用pygame.event.Event()
和pygame.event.post()
手动触发事件,而不是使用Tab键。要按时设置此活动,您可以使用pygame.time.set_timer(myEvent, time)
。之后,您的主循环只需要使用pygame.event.get()
检查事件。
有一个很好的示例,说明如何在pygame中使用自定义事件:PyGame Custom Event
作者的例子甚至是一个太空入侵者类型的游戏,因此查看它的编写方式会很有用。