【问题标题】:Decrease interval by n after n seconds in Pygame在 Pygame 中 n 秒后将间隔减少 n
【发布时间】:2021-08-16 21:16:43
【问题描述】:

我有一个pygame 事件(称为bubble_spawn_event),其间隔(称为bubble_spawn_interval)为1000。我如何使该间隔减少,例如每10 秒0.1 秒?

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

我已将气泡生成事件和间隔定义如下:

bubble_spawn_event = USEREVENT
bubble_spawn_interval = 1000
pygame.time.set_timer(bubble_spawn_event, bubble_spawn_interval)

区间改变事件和区间定义如下:

bubble_interval_change_event = USEREVENT + 1
bubble_interval_change_interval = 10000

我尝试更改气泡生成间隔:

        elif event.type == bubble_interval_change_event:
            bubble_spawn_interval -= 200
            pygame.time.set_timer(bubble_spawn_event, bubble_spawn_interval)

我的完整主循环:

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 秒。

【问题讨论】:

  • 请发布您的代码,而不是试图描述它。
  • 究竟是什么不起作用?您是否尝试取消该事件,然后在 elif 块中重新设置它?
  • 如何取消活动?
  • 使用.set_timer(event, 0),基本上将一个事件的定时器设置为0毫秒,pygame.time.set_timer() docs
  • 间隔似乎仍然没有下降。

标签: python python-3.x pygame intervals


【解决方案1】:

您显然没有重置计时器:

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()method

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-02
    • 2015-08-31
    • 2013-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    相关资源
    最近更新 更多