在pygame中闪现一个图像

时间:2016-04-03 09:07:38

标签: python python-3.x pygame

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秒闪烁一次图像?或者这实际上是最实用的方法吗?

3 个答案:

答案 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