如何在不延迟所有其他功能的情况下延迟 Pygame 中的事件?

sy89

我有一个气球需要每 3 秒爆炸一次的游戏,但爆炸需要延迟大约 1 秒(现在,它几乎是立即的)。我每 3 秒就有一次气球下降,但我在延迟部分遇到了麻烦。如果我使用睡眠或等待,我正在进行的所有其他动画都会停止,这不是我想要的。有没有人有任何提示?

skrx

这是一个完整的例子。我强烈推荐使用面向对象编程、pygame sprites 和 sprite group。这些精灵有一个timer属性,它会随着dt每帧的增量时间而减少当气球的时间到了时,它会从包含的精灵组中移除,balloon.kill()并添加一个爆炸实例。爆炸也有一个计时器并self.kill()在计时器低于 时自行移除0(按鼠标按钮可添加更多气球。)

import pygame as pg


pg.init()
screen = pg.display.set_mode((640, 480))
clock = pg.time.Clock()
# Images. Balloon = blue, explosion = orange.
BALLOON_IMAGE = pg.Surface((50, 50), pg.SRCALPHA)
pg.draw.circle(BALLOON_IMAGE, pg.Color('steelblue2'), (25, 25), 25)
EXPLOSION_IMAGE = pg.Surface((80, 80), pg.SRCALPHA)
pg.draw.circle(EXPLOSION_IMAGE, pg.Color('sienna1'), (40, 40), 40)


class Balloon(pg.sprite.Sprite):

    def __init__(self, pos):
        super().__init__()
        self.image = BALLOON_IMAGE
        self.rect = self.image.get_rect(center=pos)
        self.timer = 3

    def update(self, dt):
        self.timer -= dt


class Explosion(pg.sprite.Sprite):

    def __init__(self, pos):
        super().__init__()
        self.image = EXPLOSION_IMAGE
        self.rect = self.image.get_rect(center=pos)
        self.timer = 1

    def update(self, dt):
        self.timer -= dt
        if self.timer <= 0:
            self.kill()


balloons = pg.sprite.Group(Balloon((300, 300)))
all_sprites = pg.sprite.Group(balloons)

done = False

while not done:
    dt = clock.tick(30) / 1000

    for event in pg.event.get():
        if event.type == pg.QUIT:
            done = True
        elif event.type == pg.MOUSEBUTTONDOWN:
            balloon = Balloon(event.pos)
            balloons.add(balloon)
            all_sprites.add(balloon)

    all_sprites.update(dt)
    for balloon in balloons:
        if balloon.timer <= 0:
            balloon.kill()
            all_sprites.add(Explosion(balloon.rect.center))

    screen.fill((30, 30, 30))
    all_sprites.draw(screen)

    pg.display.flip()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在不影响其他人的情况下冻结pygame中的特定实例

来自分类Dev

我在pygame中的事件循环有问题

来自分类Dev

在PyGame中,如何在不使用睡眠功能的情况下每3秒移动一次图像?

来自分类Dev

如何在没有 # 的情况下对 Verilog 中的延迟进行建模?可以合成的

来自分类Dev

Pygame事件:在不释放键的情况下触发键事件

来自分类Dev

如何在Pygame中不刷新对象的情况下使对象永久停留在窗口中?

来自分类Dev

在R中,如何在不指定列名的情况下基于一列的值求和所有其他列?

来自分类Dev

在pygame中检测用户事件

来自分类Dev

在pygame中处理事件

来自分类Dev

如何在检查所有其他元素保持不变的情况下跳过列表中的元素

来自分类Dev

Pygame如何在不删除其他任何内容的情况下更改背景颜色

来自分类Dev

如何在不执行其他查询的情况下使图表中的计数与众不同?

来自分类Dev

在Python 2中如何在不继承的情况下重用其他类的方法?

来自分类Dev

pygame中渲染文本会导致延迟

来自分类Dev

pygame事件在几秒钟的延迟后响应

来自分类Dev

pygame事件在几秒钟的延迟后响应

来自分类Dev

GTK +小部件中嵌入的pygame显示中没有收到键但没有鼠标事件

来自分类Dev

如何在pygame中停止执行功能

来自分类Dev

如何在没有其他进程重叠的情况下从进程中打印内容?

来自分类Dev

Pygame的:如何编写事件循环多态

来自分类Dev

如何在不添加方法或类的情况下修剪所有输入中的空格?

来自分类Dev

如何在不循环的情况下访问对象数组中的所有键和值

来自分类Dev

在这种情况下,延迟在rxjs中如何工作?

来自分类Dev

在不尝试/不捕获的情况下进行延迟,或者将其包含在一项功能中

来自分类Dev

如何在signalR中的我的hubClass中添加回调功能,以在延迟的情况下将当前工作状态更新为客户端?

来自分类Dev

为什么pygame中的群组列表必须具有“更新”功能,而没有其他功能?

来自分类Dev

如何在不指定每个文本框的情况下将相同功能应用于控制器中的所有文本框

来自分类Dev

在pygame事件队列中检查特定事件

来自分类Dev

如何在不接触其他元素的情况下更新d3中的单个数据点?

Related 相关文章

  1. 1

    如何在不影响其他人的情况下冻结pygame中的特定实例

  2. 2

    我在pygame中的事件循环有问题

  3. 3

    在PyGame中,如何在不使用睡眠功能的情况下每3秒移动一次图像?

  4. 4

    如何在没有 # 的情况下对 Verilog 中的延迟进行建模?可以合成的

  5. 5

    Pygame事件:在不释放键的情况下触发键事件

  6. 6

    如何在Pygame中不刷新对象的情况下使对象永久停留在窗口中?

  7. 7

    在R中,如何在不指定列名的情况下基于一列的值求和所有其他列?

  8. 8

    在pygame中检测用户事件

  9. 9

    在pygame中处理事件

  10. 10

    如何在检查所有其他元素保持不变的情况下跳过列表中的元素

  11. 11

    Pygame如何在不删除其他任何内容的情况下更改背景颜色

  12. 12

    如何在不执行其他查询的情况下使图表中的计数与众不同?

  13. 13

    在Python 2中如何在不继承的情况下重用其他类的方法?

  14. 14

    pygame中渲染文本会导致延迟

  15. 15

    pygame事件在几秒钟的延迟后响应

  16. 16

    pygame事件在几秒钟的延迟后响应

  17. 17

    GTK +小部件中嵌入的pygame显示中没有收到键但没有鼠标事件

  18. 18

    如何在pygame中停止执行功能

  19. 19

    如何在没有其他进程重叠的情况下从进程中打印内容?

  20. 20

    Pygame的:如何编写事件循环多态

  21. 21

    如何在不添加方法或类的情况下修剪所有输入中的空格?

  22. 22

    如何在不循环的情况下访问对象数组中的所有键和值

  23. 23

    在这种情况下,延迟在rxjs中如何工作?

  24. 24

    在不尝试/不捕获的情况下进行延迟,或者将其包含在一项功能中

  25. 25

    如何在signalR中的我的hubClass中添加回调功能,以在延迟的情况下将当前工作状态更新为客户端?

  26. 26

    为什么pygame中的群组列表必须具有“更新”功能,而没有其他功能?

  27. 27

    如何在不指定每个文本框的情况下将相同功能应用于控制器中的所有文本框

  28. 28

    在pygame事件队列中检查特定事件

  29. 29

    如何在不接触其他元素的情况下更新d3中的单个数据点?

热门标签

归档