1

我试图让 ASCIImatics 的动画只运行一次然后闯入我的正常代码。就像你可以说的介绍一样。有没有办法只运行一次动画然后一旦你按下空格键就会破坏动画并进入正常的代码体?目前动画在你按下空格键后循环运行,正如我所说的,我试图让它只运行一次。谢谢!

from random import randint
from asciimatics.effects import Print
from asciimatics.particles import Explosion, StarFirework, DropScreen, Rain, \
    ShootScreen
from asciimatics.renderers import SpeechBubble, FigletText, Rainbow
from asciimatics.scene import Scene
from asciimatics.screen import Screen
from asciimatics.exceptions import ResizeScreenError
import sys
from asciimatics.effects import Cycle, Stars
import time
 
def demo(screen):
    screen.set_title("ASCIIMATICS demo")
 
    scenes = []
 
    # First scene: title page
    effects = [
        Stars
            (screen, 200),
        Cycle(screen,
              Rainbow(screen, FigletText("Welcome to", font="big")),
              y=screen.height // 4 - 5),
        Print(screen,
              Rainbow(screen, FigletText("K y l e ' s   M i n i   G a m e s !", font="big")),
              screen.height // 2 - 3,
              start_frame=7),
        Cycle(screen,
              SpeechBubble("Press space bar to play"),
              screen.height - 3,
              #transparent=False,
              start_frame=10)
    ]
    scenes.append(Scene(effects, 0, clear=True))
 
    # Next scene: just dissolve the title.
    effects = [
        ShootScreen(screen, screen.width // 2, screen.height // 2, 100),
    ]
    scenes.append(Scene(effects, 10, clear=False))

    screen.play(scenes, stop_on_resize=True)

if __name__ == "__main__":
    while True:
        try:
            Screen.wrapper(demo)
        except ResizeScreenError:
            pass
4

1 回答 1

0

这取决于你想达到什么...

如果您只想播放所有场景一次,只需指定repeat=False调用play(). 当您按空格键时,这将从第一个开始Scene,并在第二个 10 帧后自动停止Scene(由您的代码指定)。

但是,如果您想确保在那一秒清除屏幕时空格键不起作用Scene,您需要创建一个自定义Scene来捕获并忽略空格键。ray_casting.py 演示中的GameController类展示了如何做到这一点。

于 2021-07-23T21:04:00.793 回答