1

alpha = 0 から alpha = 255 まで 2 秒間で四角形をフェードインしたいと考えています。次のコードを使用すると、四角形をフェードインできますが、持続時間を正確に (できるだけ正確に) 2 秒にする方法がわかりません。

pygame.init()

#frames per second setting
FPS = 30
fpsClock = pygame.time.Clock()

#Set up window
screen = pygame.display.set_mode((1280,800))
shape = screen.convert_alpha()

#Colors
alpha = 0
WHITE = (255, 255, 255,alpha)
BLACK = (0,0,0)

#Stimuli
stimulus = pygame.Rect(100,250,100,100)

def fade():
    """Fades in stimulus"""
    global alpha
    alpha = alpha + 5   <--- (Do I change this increment?)
    #Draw on surface object
    screen.fill(BLACK)
    shape.fill(BLACK)
    pygame.draw.rect(shape,(255, 255, 255,alpha),stimulus)
    screen.blit(shape,(0,0))
    pygame.display.update(stimulus)
    fpsClock.tick(FPS)

while True:
    fade()

さらに、フルスクリーンを使用している場合、フラグ HWSURFACE および DOUBLEBUF を使用する必要がありますか? ありがとう。

4

1 に答える 1

2

運用開始から実際に経過した時間を計測alphaし、残り時間に正比例させてみます。

線に沿った何か:

import time

def fade():
    DURATION = 2.0 # seconds
    start_time = time.clock()
    ratio = 0.0 # alpha as a float [0.0 .. 1.0]
    while ratio < 1.0:
        current_time = time.clock()
        ratio = (current_time - start_time) / DURATION
        if ratio > 1.0: # we're a bit late
            ratio = 1.0
        # all your drawing details go in the following call
        drawRectangle(coordinates, alpha = 255 * ratio)
        fpsClock.tick(FPS)

このように、tick不完全に動作する場合 (実際にそうです)、アルファはエラーを蓄積するのではなく、その不完全性に従います。2 秒経過すると、完全に不透明な四角形が描画されたことが保証されます。

于 2012-11-20T03:50:38.320 に答える