首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Pygame中,在n秒后将间隔减少n

在Pygame中,在n秒后将间隔减少n
EN

Stack Overflow用户
提问于 2021-08-16 21:16:44
回答 1查看 69关注 0票数 3

我有一个pygame事件(称为bubble_spawn_event),它的间隔(称为bubble_spawn_interval)为1000。我如何使时间间隔减少,比如说每10秒减少0.1秒?

我尝试创建一个间隔(bubble_interval_change_interval)为10秒的单独事件(名为bubble_interval_change_event),当该事件发生时,将bubble_spawn_interval减少0.1秒,然后对同一事件调用pygame.time.set_timer()。(bubble_spawn_event)

我已经定义了气泡衍生事件和间隔,如下所示:

代码语言:javascript
复制
bubble_spawn_event = USEREVENT
bubble_spawn_interval = 1000
pygame.time.set_timer(bubble_spawn_event, bubble_spawn_interval)

间隔更改事件和间隔定义如下:

代码语言:javascript
复制
bubble_interval_change_event = USEREVENT + 1
bubble_interval_change_interval = 10000

我尝试更改气泡繁殖间隔:

代码语言:javascript
复制
        elif event.type == bubble_interval_change_event:
            bubble_spawn_interval -= 200
            pygame.time.set_timer(bubble_spawn_event, bubble_spawn_interval)

我的完整主循环:

代码语言:javascript
复制
while running:
    for event in pygame.event.get():
        if event.type == QUIT:
            running = False
        elif event.type == bubble_spawn_event:
            bubbles.add(Bubble(screen, random.randint(100, screen.get_width() - 100), screen.get_height()))
        elif event.type == bubble_interval_change_event:
            pygame.time.set_timer(bubble_spawn_event, 0)
            bubble_spawn_interval -= 200
            pygame.time.set_timer(bubble_spawn_event, bubble_spawn_interval)

    screen.blit(bg_image, (0, 0))

    bubbles.update()

    for bubble in bubbles:
        bubble.screen.blit(bubble.image, bubble.rect)
        bubble.move()

    pygame.display.update()
    clock.tick(60)

pygame.quit()

问题是,气泡产生间隔根本不会下降,即使我将间隔减少了0.9秒。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-16 22:27:35

您显然没有重置计时器:

代码语言:javascript
复制
import pygame
import random


pygame.init()
screen = pygame.display.set_mode((700, 400))

spawn_bubble = pygame.USEREVENT
spawn_bubble_timer = 1000
pygame.time.set_timer(spawn_bubble, spawn_bubble_timer)

reduce_timer = spawn_bubble + 1
reduce_timer_timer = 5000
pygame.time.set_timer(reduce_timer, reduce_timer_timer)

run = True
while run:
    pygame.time.Clock().tick(10)
    screen.fill((0, 0, 0))
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
        if event.type == spawn_bubble:
            pygame.draw.circle(screen, (255, 0, 0),
                               (random.randint(0, 700), random.randint(0, 400)), 5)
        if event.type == reduce_timer:
            pygame.time.set_timer(spawn_bubble, 0)
            spawn_bubble_timer -= 200
            if spawn_bubble_timer <= 0:
                spawn_bubble_timer = 200
            pygame.time.set_timer(spawn_bubble, spawn_bubble_timer)

    pygame.display.update()

pygame.quit()

注意pygame.time.set_timer(spawn_bubble, 0)行,它从该事件中删除计时器。如果您运行此代码,您将看到随着时间的推移,这些点开始越来越快地出现。(上限为200毫秒,这样它就不会取消自身或进入负值,实际上当上限也可以取消reduce_timer事件调度时)

附言:这是我第一次使用.set_timer()方法

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68809315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档