Python版本:3.5.1和PyGame版本:1.9.2a0
我的主要目标是在屏幕上闪现图像。开0.5秒,关闭0.5秒。
我知道以下内容适用于60fps
frameCount = 0
imageOn = False
while 1:
frameCount += 1
if frameCount % 30 == 0: #every 30 frames
if imageOn == True: #if it's on
imageOn = False #turn it off
elif imageOn == False: #if it's off
imageOn = True #turn it on
clock.tick(60)
但我认为计算int中的帧是不切实际的。最终我的帧号太大而无法存储在int中。
如何在没有将当前帧(在本例中为frameCount)存储为整数的情况下每x秒闪烁一次图像?或者这实际上是最实用的方法吗?
答案 0 :(得分:1)
您可以尝试使用pygame timers
import pygame
from pygame.locals import *
def flashImage():
imageOn = not imageOn
pygame.init()
pygame.time.set_timer(USEREVENT+1, 500) # 500 ms = 0.5 sec
imageOn = False
while 1:
for event in pygame.event.get():
if event.type == USEREVENT+1:
flashImage()
if event.type == QUIT:
break
答案 1 :(得分:1)
避免让游戏依赖于帧速率,因为它会根据帧速率改变一切,如果计算机无法运行帧速率,整个游戏就会变慢。
此变量将帮助我们跟踪已经过了多长时间。 在while循环之前:
elapsed_time = 0
找一个帧所需的时间。 my_clock是一个pygame Clock对象,60是任意的
elapsed_time += my_clock.tick(60) # 60 fps, time is in milliseconds
你可以在while循环中的某个地方加上if语句:
if elapsed_time > 500 # milliseconds, so .5 seconds
imageOn = False if imageOn else True
elapsed_time = 0 # so you can start counting again
编辑:我建议查看Chritical的答案,以更简单的方式更改imageOn的True False值。我使用了内联条件,这是有效的,但它是不必要的。
答案 2 :(得分:0)
我不知道这对你有多大帮助,但是为了防止你的frameCount
变得过大,每当你改变0
的状态时,你可以使它等于imageOn
1}},例如
if frameCount % 30 == 0:
if imageOn == True:
imageOn = False
frameCount = 0
elif imageOn == False:
imageOn = True
frameCount = 0
但是,如果没有其他人以更好的方式回答问题,我只推荐这作为最后的手段。希望这有帮助,即使有一点点!
编辑:我刚刚意识到,您还可以通过简单地制作imageOn = not imageOn
来更简洁地构建代码:
if frameCount % 30 == 0:
imageOn = not imageOn
frameCount = 0