微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Pygame 每 10 秒就有一个新敌人?

如何解决Pygame 每 10 秒就有一个新敌人?

对不起,这个问题可能是重复的,但我一直在搜索关于这个主题的很多东西,但我什么也做不了。那么我怎样才能每 10 秒在屏幕上显示一个新敌人呢? 顺便说一句,我想使用 USEREVENTS 来实现它,因为我正在学习它们。 我真的遇到了这类事件的问题,我无法获得它们,这就是我尝试过的:

a = 10000
for event in pygame.event.get():
    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_e:
            pygame.time.set_timer(pygame.USEREVENT+1,a)
if a == 0:
    screen.blit(enemy,(enemyX,enemyY))
    a = 5000

解决方法

在 pygame 中存在一个计时器事件。使用 pygame.time.set_timer() 在事件队列中重复创建 USEREVENT。时间必须以毫秒为单位设置。例如:

timer_interval = 10000 # 10 seconds
timer_event = pygame.USEREVENT + 1
pygame.time.set_timer(timer_event,timer_interval)

注意,在 pygame 中可以定义客户事件。每个事件都需要一个唯一的 ID。用户事件的 ID 必须介于 pygame.USEREVENT (24) 和 pygame.NUMEVENTS (32) 之间。在这种情况下,pygame.USEREVENT+1 是计时器事件的事件 ID。

在事件循环中接收事件:

run = True
while run:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

         elif event.type == timer_event:
             # [...]

可以通过将 0 传递给 pygame.time.set_timertime 参数来停止计时器事件。


注意,你必须使用列表来管理敌人。事件发生时,将新的敌人位置添加到列表中。循环遍历敌人。移动并绘制循环中的敌人:

timer_interval = 10000 # 10 seconds
timer_event = pygame.USEREVENT + 1
pygame.time.set_timer(timer_event,timer_interval)

enemy_list = []

run = True
while run:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

         elif event.type == timer_event:
             # [...]

             enemy_list.append([enemyX,enemyY])  

    # [...]

    for enemy_pos in enemy_list:
        screen.blit(enemy,enemy_pos)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。