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)