如何在 Python 中只运行一次 ASCIImatics 动画?

问题描述

我试图让 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,figletText("K y l e ' s   M i n i   G a m e s !",screen.height // 2 - 3,start_frame=7),SpeechBubble("Press space bar to play"),screen.height - 3,#transparent=False,start_frame=10)
    ]
    scenes.append(Scene(effects,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

解决方法

这取决于你想要达到的目标...

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

但是,如果您想确保在第二个 Scene 中清除屏幕时空格键不起作用,您需要创建一个自定义 Scene 来捕捉并忽略空格酒吧。 ray_casting.py 演示中的 GameController 类展示了如何执行此操作。