Renpy 帧动画
黑凤梨A4
2022年08月13日 11:42

今天来讲帧动画。

之前在[Renpy教程] 下雪/下雨/电影特效​里有使用到帧动画。当时的代码是这样的:

代码块
JavaScript
自动换行
复制代码
 image rain:
    "rain1.png"
    0.2
    "rain3.png"
    0.2
    "rain2.png"
    0.2
    repeat
复制成功

如果图片是一张一张的,就可以用这种办法来播放。不过如果图片很多的情况,这样播放就非常麻烦,需要写很多行代码。

Renpy提供了另外一种解决方案。就是使用anim.Filmstrip。从官方的cookbook里教程的例子是

代码块
JavaScript
自动换行
复制代码
init:
    image ctc = anim.Filmstrip("sakura.png", (20, 20), (2, 1), .30,
                               xpos=760, ypos=560, xanchor=0, yanchor=0)
复制成功

这里来解释下,anim.Filmstrip的参数。

image 图片:用来做帧动画的图片。上面例子是sakura.png

随便在网上找一个例子,大概是类似下面的这样的图片,是一张图片,但是上面其实有好几个动画的过程。

framesize 单个桢图片的尺寸(宽度,高度):上面的代码例子里就是(20,20)

这个也可以计算出来,以上面鸟的图为例子,如果原来的图的尺寸是400, 200,单个图就是100,100. 就是(100,100)

gridsize 格子的尺寸(列,行) 上面的代码例子里就是(2,1)

如果是用黄鸟图做例子就是(4, 2)

delay 延迟时间 两桢之间的时间,这个数字越大播放的越慢。上面的代码例子里就是

frames 帧数

loop 是否循环 

代码块
Python
自动换行
复制代码
image magictest:
        anim.Filmstrip("magic.png", (640,480), (5,6), .1, loop=False)
        zoom 2

label start():
    play music "audio/bgm.ogg"

    "这次的演示是播放魔法阵。"
    "和之前的帧动画写法不同的是,使用了anim.Filmstrip这个函数。"
    "这样就不需要写很多行来播放帧动画。"
    "是用下面这样一张图片来播放动画。"
    scene black
    show magic:
        zoom 0.3

    pause
    hide magic
    jump test1

    return

label test1():
    scene black
    python:
        renpy.free_memory()
        renpy.start_predict_screen( 'test' )
    play sound "audio/se.ogg"
    show screen test
    pause
    $ renpy.stop_predict_screen('test')
    return

screen test():
    add "magictest":
        xalign .5 yalign .5
复制成功

参考:

https://www.renpy.org/wiki/renpy/doc/reference/functions/anim.Filmstrip