Ren’Py可以使用FFmpeg解码器(已内置)播放以下视频编码格式的影片:
及以下编码格式的音频:
还支持以下容器格式:
(注意某些格式可能需要专利许可证书。没有把握的情况下,我们推荐使用VP9、VP8或者Theora、Opus、Vorbis,以及WebM、Matroska或者Ogg。)
影片可以全屏播放,也可以在一个可视组件内播放。全屏播放更省事。
全屏播放影片最简单有效的办法是,使用 renpy.movie_cutscene()
函数。该函数会全屏播放影片直到影片结尾。用户也可以点击直接跳过播放。
$ renpy.movie_cutscene("On_Your_Mark.webm")
在移动端平台,例如安卓和iOS,默认情况下配置项 config.hw_video
设为True,此时会启用硬件视频解码。硬件视频解码效率更高,但具体支持的影片格式需要视具体平台而定。
这里可以查看 安卓支持的媒体格式。
一个快速测试的办法是,直接把视频文件复制到手机上,然后使用默认的视频播放器看看能否播放。
Web平台不支持播放影片。
任何可展示可视组件的地方,Ren’Py都可以使用影片组件实现影片的播放。例如,可以在菜单界面播放一个影片作为背景。
影片组件也能用于定义一个影片精灵(sprite)。影片精灵(sprite)由两段影片组成。主影片提供精灵(sprite)的各种颜色信息。次影片是一个遮罩影片,提供alpha通道信息,白色表示完全不透明而黑色表示完全透明。
使用影片组件会自动循环播放。
影片组件有两个参数:
该值是一个字符串,给定了需要播放的影片文件名。
必须提供的这个值。
这里有一个定义影片精灵(sprite)的样例:
image eileen movie = Movie(play="eileen_movie.webm", mask="eileen_mask.webm")
影片精灵可以使用show语句显示,并自动启动影片播放。如果可视组件被隐藏时,影片播放会自动停止。
show eileen movie
e "我感觉自己今天很活跃。"
hide eileen
e "不过在我不出现的时候没必要浪费力气。"
影片组件也能被用作某个界面的一部分,在初始化阶段定义即可(然后就可作为某个image语句的一部分)。
image main_menu = Movie(play="main_menu.ogv")
screen main_menu:
add "main_menu"
textbutton "Start" action Start() xalign 0.5 yalign 0.5
在同一个界面的同一时间可以显示多个影片组件或影片精灵(sprite)。受到系统性能限制,多个影片播放时使用相同的帧率。Ren’Py中没有定义过使用不同帧率播放影片的行为,很可能会导致很严重的掉帧。
renpy.
movie_cutscene
(filename, delay=None, loops=0, stop_music=True) link该函数播放一个MPEG-1格式的过场。用户可以使用点击跳过该过场。顶层元素overlay和底层元素underlay在过场中依然显示。
若影片播放被用户停止则返回True,若在delay定义的预计时间内由于其他原因中断播放则返回False。
Movie
(fps=24, size=None, channel='movie', play=None, mask=None, mask_channel=None, image=None, play_callback=None, **properties) link该函数创建了一个可视组件用于显示当前影片。
_mask
后缀,注册一个新的通道。(例如,若入参channel名为“sprite”,那么自动生成的mask_channel值就是“sprite_mask”。)若不是None,这个函数用于启动影片的播放。(函数的工作可能是将一个转场加入到各个sprite之间。)调用函数时使用下列入参:
Movie对象中包含的播放参数分别对应 channel
、 mask
和 mask_channel
字段(field)的入参。
如果想要使用 renpy.music.play()
在指定的通道启动影片播放的话,带上synchro_start=True。最小化实现代码如下:
def play_callback(old, new):
renpy.music.play(new._play, channel=new.channel, loop=True, synchro_start=True)
if new.mask:
renpy.music.play(new.mask, channel=new.mask_channel, loop=True, synchro_start=True)