- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在尝试使用 pygame 制作闪电动画。我计划使用 pygame.timer.set_timer() 模块每 3 秒发生一次闪电动画,因为我将发生独立于闪电动画的其他动画。
为了简单起见,我用一个拉长的黄色三角形来象征闪电。一旦超过某个点,我计划让黄色三角形停止,消失 3 秒,然后再次出现。
但是,lightning_event似乎并不是每次在while循环中都会触发,并且没有发生延迟。
我已经使用 pygame.timer.set_timer() 查看了入侵者示例,尽管它不使用 xy 坐标。我尝试调整入侵者代码以使用 xy 坐标,但它也不起作用。
我的另一个问题是,如果同时发生许多事件,使用多线程或多处理是否比使用 pygame.timer.set_timer() 更好?如果是这样,多线程或多处理如何与 pygame 模块一起使用?尤其是因为python的GIL?
这是我的照明动画代码:
import pygame
pygame.init()
BLACK = (0,0,0)
WHITE = (255,255,255)
GREEN = (0,255,0)
RED = (255,0,0)
BLUE = (0,0,255)
YELLOW = (200,240,70)
size = (700,500)
screen = pygame.display.set_mode(size)
pygame.display.set_caption("Multithreading Project")
done = False
delay1 = 3000
clock = pygame.time.Clock()
def lightning(y_coord,y_coord_incr):
pygame.draw.polygon(screen,YELLOW,[[200,200],[100,y_coord],[300,y_coord]])
lightning_event = pygame.USEREVENT + 1
pygame.time.set_timer(lightning_event, delay1)
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
elif event.type == lightning_event:
if y_coord > 500:
y_coord = 200
screen.fill(WHITE)
lightning(y_coord,y_coord_incr)
y_coord = y_coord + y_coord_incr
pygame.display.flip()
clock.tick(60)
pygame.quit()
谢谢!
最佳答案
您可以添加一个 bool 变量(我将其称为 lightning_anim_playing
)并将其设置为 True
以启动动画。
当动画播放时,增加y_coord
并绘制闪电。
一旦 y_coord 大于 500,就启动下一次闪电的计时器 (pygame.time.set_timer(lightning_event, delay1)
) 并将 bool 变量设置为 False
停止动画。
当计时器完成后,停止它(pygame.time.set_timer(lightning_event, 0)
),重置 y_coord 并再次将 bool 变量设置为 True
开始下一个动画。
import pygame
WHITE = (255,255,255)
YELLOW = (200,240,70)
pygame.init()
screen = pygame.display.set_mode((700, 500))
clock = pygame.time.Clock()
delay1 = 3000
lightning_event = pygame.USEREVENT + 1
pygame.time.set_timer(lightning_event, delay1)
y_coord = 200
y_coord_incr = 3
lightning_anim_playing = False
done = False
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
elif event.type == lightning_event:
pygame.time.set_timer(lightning_event, 0) # Stop the timer.
lightning_anim_playing = True # Start the animation.
y_coord = 200 # Reset the y_coord.
if lightning_anim_playing:
# Update the y_coord.
y_coord += y_coord_incr
if y_coord > 500:
# Stop the animation.
lightning_anim_playing = False
# Start the timer for the next lightning.
pygame.time.set_timer(lightning_event, delay1)
screen.fill(WHITE)
# Draw the lightning if the animation is playing.
if lightning_anim_playing:
pygame.draw.polygon(screen,YELLOW,[[200,200],[100,y_coord],[300,y_coord]])
pygame.display.flip()
clock.tick(60)
pygame.quit()
关于python - 使用 pygame.timer.set_timer() 的 Pygame 闪电动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51162205/
我正在使用 Pygame 和 Python 制作游戏,这是 Asteroids 的一种形式。每隔 10 秒,如果屏幕上同时显示的小行星不超过 10 颗,游戏就会生成另一颗小行星。当我查看有关如何实现它
这个问题在这里已经有了答案: Countdown timer in Pygame (8 个答案) How do I use a PyGame timer event? How to add a cl
我有一个小问题... pygame.time.set_timer() 是否有某种重置? 我已经让它运行正常,但问题是我需要在执行特定操作时将计时器重置回 0。由于它现在正在运行,计时器将每秒触发一次
所以,我有一个问题,无论如何我都不完全理解需要给定时器命令的事件,它没有说在线的任何地方,我搜索了几个小时的地方。所以我只是使用了大多数人似乎使用的“USEREVENT + 1”。我不确定它是否正确,
我是 python 和 pygame 的新手,正在尝试自学,所以我自然是个菜鸟。现在,我正在尝试编写某种“过场动画”(它只是一个黑屏,带有声音效果和在特定时间播放和显示的文本),可以通过按转义键随时跳
我正在尝试使用新的 GrantPermissionRule这是最新支持库的一部分。 在我的 list 中,我声明如下: 在我的代码中,我调用: @Rule public GrantPermissio
我目前正在尝试使用 pygame 制作闪电动画。我计划使用 pygame.timer.set_timer() 模块每 3 秒发生一次闪电动画,因为我将发生独立于闪电动画的其他动画。 为了简单起见,我用
我是一名优秀的程序员,十分优秀!