【问题标题】:Pygame new enemy every 10sec? [duplicate]Pygame每10秒就有一个新敌人? [复制]
【发布时间】:2021-07-22 00:04:48
【问题描述】:

对不起,这个问题可能是重复的,但我一直在搜索有关此主题的很多内容,但我无能为力。那么我怎样才能每 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

【问题讨论】:

    标签: events pygame game-development


    【解决方案1】:

    在 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)
    

    【讨论】:

    • 谢谢,但是每次time_interval变为零时,定时器会自动重新设置为10000毫秒吗?还是我应该自己做?顺便说一句,pygame.NUMEVENTS 是什么?
    • @Developeeer 是的,正如我在答案中提到的 “使用 pygame.time.set_timer() 在事件队列中重复创建 USEREVENT。” - 阅读文档会也有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多