轉場(transition) link

在Ren’Py中,轉場(transition)可以用作 with 語句 及其他語句的一部分,用於場景切換時提供各種效果。Ren’Py自帶一寫預定義的轉場(transition)效果,可以在with語句中直接使用。Ren’Py中還包含transition類,可以用於創建新的transition對象。

預定義的轉場(Pre-Defined Transitions) link

預定義的轉場(transition)可以直接使用在with語句中。舉例:

show bg washington
with dissolve
fade link

0.5秒時間畫面逐漸暗淡至全黑,然後0.5秒時間畫面從全黑逐漸變亮成新界面。一個 Fade() 轉場類的實例。

dissolve link

0.5秒時間,使用溶解效果從舊界面切到新界面。一個 Dissolve() 轉場類的實例。

pixellate link

0.5秒像素化舊場景,並0.5秒反向像素化至新場景。一個 Pixellate() 轉場類的實例。

move link

通過在圖像上移動位置切換場景。一個 MoveTransition() 的轉場實例。

moveinright link

及: moveinleft, moveintop, moveinbottom

從界面上對應的邊界移入圖像,用時0.5秒。

moveoutright link

及: moveoutleft, moveouttop, moveoutbottom

從界面上對應的邊界移出圖像,用時0.5秒。

ease link

及: easeinright, easeinleft, easeintop, easeinbottom, easeoutright, easeoutleft, easeouttop, easeoutbottom

類似於上面的move系列轉場效果,差別在於ease系列基於餘弦曲線放緩開始和結束的轉場。

zoomin link

鏡頭放大切入圖像,耗時0.5秒。

zoomout link

鏡頭縮小離開圖像,耗時0.5秒。

zoominout link

先鏡頭放大切入圖像,然後鏡頭縮小離開圖像,耗時0.5秒。

vpunch link

這種轉場效果,會垂直搖晃界面0.25秒。

hpunch link

這種轉場效果,會水平搖晃界面0.25秒。

blinds link

垂直遮蔽原界面,耗時1秒。一個 ImageDissolve() 轉場類的實例。

squares link

以平面效果轉場界面,耗時1秒。

wipeleft link

及: wiperight, wipeup, wipedown

以指定方向擦除原界面。 CropMove() 轉場類的實例。

slideleft link

及: slideright, slideup, slidedown

以指定方向滑入新場景。 CropMove() 轉場類的實例。

slideawayleft link

及: slideawayright, slideawayup, slideawaydown

以指定方向滑出舊場景。 CropMove() 轉場類的實例。

pushright link

及: pushleft, pushup, pushdown

新場景把舊場景從指定的邊界推出。 PushMove() 轉場類的實例。

irisin link

及: irisout

使用一個矩形iris顯示新界面,或者隱藏舊界面。 CropMove() 轉場類的實例。

轉場(transition)類 link

轉場(transition)類是可以用於創建新轉場效果的功能函數。這些函數是參數化的,允許創建一個系列的轉場。

使用with語句就可以調用轉場類。舉例:

# 一個持續時間10秒的溶解轉場
with Dissolve(10.0)

如果我們經常調用同一個轉場效果,可以使用 define語句 把轉場效果聲明為一個變數。

define annoytheuser = Dissolve(1.0)

label start:
     show bg washington
     with annoytheuser
AlphaDissolve(control, delay=0.0, alpha=False, reverse=False) link

返回一個轉場(transition)效果,其使用一個控制組件(大多數情況下是某些動畫)實現新舊界面的轉場。transform表達式會進行計算。當transform完全不透明時新界面被啟用,而transform完全透明時依然使用舊界面。

control
控制transform。
delay
轉場效果使用時間。
alpha
若該值為真(true),圖像會與其後面的圖像混合。若該值為假(false),圖像完全不透明,並會覆蓋在後面的圖像上。
reverse
若該值為真(true),alpha通道值反轉。不透明區域來自舊圖像,而透明區域來自新圖像。
ComposeTransition(trans, before, after) link

返回由三種轉場合成的一個轉場效果。 beforeafter 轉場會分別應用在舊場景和新場景,前提是這兩個參數非空。被更新後的舊場景和新場景最後還會應用 trans 轉場效果。

# 舊場景圖像從左側移出,新場景圖像從右側移入,同時使用溶解效果。(這是一個系統消耗比較大的轉場。)
define moveinoutdissolve = ComposeTransition(dissolve, before=moveoutleft, after=moveinright)
CropMove(time, mode="slideright", startcrop=(0.0, 0.0, 0.0, 1.0), startpos=(0.0, 0.0), endcrop=(0.0, 0.0, 1.0, 1.0), endpos=(0.0, 0.0), topnew=True) link

返回一個轉場效果,其會剪裁一個場景並將其放置在界面中指定位置。其可以模板化處理一堆效果,這些效果的共通點是將界面分割成矩形條(slice)。

time
轉場效果耗時。
mode

轉場模式名。轉場模式總共有3大類:wipes、slides、其他。也可以是“custom”,是一個用戶自己定義的模式。

在wipe模式下,原圖像先保持不變,然後逐漸使用轉場效果全部擦除。例如,在“wiperight”模式下,一個刷子會從左到右擦除原圖像,即先擦除界面最左邊的圖像,接著擦除界面中間,最後擦除界面最右邊。其他的wipe包括“wipeleft”、“wipedown”和“wipeup”。

在slide模式下,圖像會移動。在“slideright”模式下,圖像的右邊從界面的左邊開始,平移至界面右邊,完成整個轉場過程。其他slide模式包括“slideleft”、“slidedown”和“slideup”。

還有slideaway模式,這個模式下原圖像在新圖像上層,平移出界面。slideaway模式包括“slideawayright”、“slideawayleft”、“slideawayup”和“slideawaydown”。

我們還支持矩形iris,包括“irisin”和“irisout”。

下列參數值在模式為“custom”的情況下才會使用。位置訊息與界面尺寸相關,剪裁大小與圖像尺寸相關。一個(0.25, 0.0, 0.5, 1.0)的剪裁會使用某個圖像的中間一小塊。

startcrop
頂層圖像的剪裁起始矩形。一個4元素的元組,包含x、y、width和height。
startpos
頂層圖像繪製在界面上起始坐標。一個2元素的元組,包含x和y。
endcrop
頂層圖像的剪裁結束矩形。一個4元素的元組,包含x、y、width和height。
endpos
頂層圖像繪製在界面上結束坐標。一個2元素的元組,包含x和y。
topnew
若該值為真(true),被剪裁和移動的是新場景。若該值為假(false),被剪裁和移動的是舊場景。
define wiperight = CropMove(1.0, "wiperight")
define wipeleft = CropMove(1.0, "wipeleft")
define wipeup = CropMove(1.0, "wipeup")
define wipedown = CropMove(1.0, "wipedown")

define slideright = CropMove(1.0, "slideright")
define slideleft = CropMove(1.0, "slideleft")
define slideup = CropMove(1.0, "slideup")
define slidedown = CropMove(1.0, "slidedown")

define slideawayright = CropMove(1.0, "slideawayright")
define slideawayleft = CropMove(1.0, "slideawayleft")
define slideawayup = CropMove(1.0, "slideawayup")
define slideawaydown = CropMove(1.0, "slideawaydown")

define irisout = CropMove(1.0, "irisout")
define irisin = CropMove(1.0, "irisin")
Dissolve(time, alpha=False, time_warp=None) link

返回一個使用溶解效果切換新舊場景的轉場效果。

time
溶解效果持續時間。
alpha
若該值為真(true),溶解效果會使用alpha通道。若該值為假(false),直接替換原界面,這樣效率比較高。
time_warp
一個調整時間線的功能函數。若不為空值(None),其應該是一個使用0.0至1.0之間的小數作為輸入的函數,返回結果也是0.0至1.0之間。
Fade(out_time, hold_time, in_time, color="#000") link

返回一個轉場效果,其使用 out_time 入參時間(單位為秒),逐漸將整個界面填充為 color 指定的顏色,維持這個界面 hold_time 指定的時間(單位為秒),最後使用 in_time 入參時間(單位為秒)逐漸切換為新界面。

# 逐漸變黑並還原。
define fade = Fade(0.5, 0.0, 0.5)

# 保持全黑界面1秒。
define fadehold = Fade(0.5, 1.0, 0.5)

# 鏡頭閃光——快速且為純白,然後恢復原界面。
define flash = Fade(0.1, 0.0, 0.5, color="#fff")
ImageDissolve(image, time, ramplen=8, reverse=False, alpha=True, time_warp=None) link

返回一個轉場效果,其使用溶解特效切換新舊界面,並利用某個圖像控制溶解過程。這意味著純白的像素首先被溶解,而純黑的像素最後溶解。

image
使用的控制圖像。其必須是一個圖片文件或者圖像控制器。控制圖像需要與待溶解場景的尺寸一致。
time
溶解效果持續時間。
ramplen
色彩蔓延(ramp)步長。其必須是一個2的整次冪。預設值是8,當純白像素全部溶解之後,下一步溶解的像素是在灰度上比純白色低8度的顏色。
reverse
若該值為真(true),黑色像素反而先於白色像素溶解。
alpha
若該值為真(true),溶解效果會使用alpha通道。若該值為假(false),直接替換原界面,這樣效率比較高。
time_warp
一個調整時間線的功能函數。若不為空值(None),其應該是一個使用0.0至1.0之間的小數作為輸入的函數,返回結果也是0.0至1.0之間。
define circirisout = ImageDissolve("circiris.png", 1.0)
define circirisin = ImageDissolve("circiris.png", 1.0, reverse=True)
define circiristbigramp = ImageDissolve("circiris.png", 1.0, ramplen=256)
MoveTransition(delay, enter=None, leave=None, old=False, layers=['master'], time_warp=None, enter_time_warp=None, leave_time_warp=None) link

返回一個轉場效果,其插入了新舊場景中(使用相同的圖像標籤tag)圖像的坐標。

delay
插入效果耗時。
enter
若該值非空,圖像所進入的場景會一同移動。 enter 的值應是一個應用在圖像行的變換(transform),該變換可以獲取其起始坐標。
leave
若該值非空,圖像所離開的場景會一同移動。 leave 的值應是一個應用在圖像行的變換(transform),該變換可以獲取其結束坐標。
old
若該值為真(true),舊圖像會被使用而不是新圖像。
layers
移動的圖層(layer)列表。
time_warp
應用於插入效果的時間warp函數。其是一個使用0.0至1.0之間的小數作為輸入的函數,返回結果也是0.0至1.0之間。
enter_time_warp
應用於圖像進入場景的時間warp函數。
leave_time_warp
應用於圖像離開場景的時間warp函數。
MultipleTransition(args) link

返回一個轉場效果,其是多個轉場效果順序顯示之後的集。

args

一個包含奇數個物件的列表。列表中奇數序號的物件必須是場景,偶數序號的物件必須是轉場效果。這裡說的場景可以是如下類別之一:

  • 可視組件。
  • false值,表示使用舊場景。
  • true值,表示使用新場景。

大多數情況下,第一個入參會是false而最後一個是true。

args 中的轉場按順序執行。對每一個轉場效果而言,其前面的參數就是舊場景,其後面的參數就是新場景。舉例:

define logodissolve = MultipleTransition([
     False, Dissolve(0.5),
     "logo.jpg", Pause(1.0),
     "logo.jpg", dissolve,
     True])

這個例子中,首先會使用溶解效果切換到logo.jpg文件,等待1秒鐘後,再使用溶解效果切換至新場景。

Pause(delay) link

返回一個轉場效果,其會在 delay 秒後顯示新的場景。這個轉場效果可以用作MultipleTransition的一部分。

Pixellate(time, steps) link

返回一個轉場效果,其使用像素化切換新舊場景。

time
轉場效果總耗時,單位為秒。
steps
在各個方向展開像素化使用的步數。每一步都會創建出上一步兩倍寬度和高度的像素方塊,所以5步像素化就能創建出32×32大小的像素方塊。
PushMove(time, mode="pushright") link

返回一個轉場效果,其使用新場景把舊場景“推”出界面。

time
轉場效果耗時。
mode
總共有4種模式:“pushright”、“pushleft”、“pushup”和“pushdown”,對應舊場景被“推”出界面的方向。
define pushright = PushMove(1.0, "pushright")
define pushleft = PushMove(1.0, "pushleft")
define pushup = PushMove(1.0, "pushup")
define pushdown = PushMove(1.0, "pushdown")
Swing(delay=1.0, vertical=False, reverse=False, background="#000", flatten=True) link

一個轉場效果。將舊場景繞某個軸旋轉90度,此時畫面是該場景一條邊;切換為新場景並繼續旋轉90度。

delay
轉場持續時間。
vertical
若為True,場景繞x軸旋轉(像素在垂直方向移動)。若為False,場景繞y軸旋轉(像素在水平方向移動)。
reverse
若為True,反向旋轉。
background
場景旋轉時,顯示為背景的可視組件。
flatten
若為True,場景內元素將編排為螢幕尺寸相同的圖像進行旋轉。 某些圖像沒有完整顯示在螢幕中導致不希望出現的效果時,可以設置該參數。

轉場族群 link

轉場族群是可以定義一系列相關轉場效果的函數。

define.move_transitions(prefix, delay, time_warp=None, in_time_warp=None, out_time_warp=None, old=False, layers=[u'master'], **kwargs) link

該函數定義了move轉場效果的族群,類似於move和ease轉場。根據給定的入參 prefix ,其定義了以下轉場效果:

  • prefix ——一個轉場效果,其使用 delay 秒時間,將圖像移動至新坐標。
  • prefixinleftprefixinrightprefixintopprefixinbottom —— 這些轉場效果,使用 delay 秒時間,將圖像移動至新坐標,並將新的圖像從對應的界面邊緣移入界面。
  • prefixoutleftprefixoutrightprefixouttopprefixoutbottom —— 這些轉場效果,使用 delay 秒時間,將圖像移動至新坐標,並將新的需要隱藏的圖像從對應的界面邊緣移出界面。
time_warp, in_time_warp, out_time_warp

時間扭曲功能是根據輸入的圖像移動完成時間(取值範圍為0.0值1.0),返回一個圖像直線運動的完成時間比例(取值範圍為0.0值1.0)。

該功能讓圖像運動速度複合緩動(ease)曲線,而不是讓所有圖像以一個統一恆定的速度移動。

三個變數分別對應停留在界面的圖像、新顯示的圖像和新隱藏的圖像。

old
若該值為真(true),轉場效果作用於舊的可視組件,而不是新的那些。
layers
應用轉場效果的圖層(layer)名。
# 這條語句定義了所有以“move”開頭的預定義轉場效果的delay時間
init python:
    define.move_transitions("move", 0.5)

字典轉場(Dict Transitions) link

在很多Ren’Py用到轉場的地方,可以用一個字典存放各圖層和轉場的映射關係。這種情況下,Ren’Py會給每個圖層應用一個合適的轉場。

當用到dict時,不會發生轉場時通常發生的暫停。相反的是,dict語句立即返回字典,並且轉場在下一次交互時開始執行。

這可以與main圖層一起使用,以便在界面(screen)上顯示對話時發生轉場。舉個例子,如果我們寫成:

define dis = { "master" : Dissolve(1.0) }

和:

show eileen happy
with dis

e "Hello, world."

溶解效果將在文本顯示的時候發生。

字典層轉場不能在所有能用轉場的地方使用,只有在能給一個層應用的轉場時它才能使用。可以使用 with 語句和scene、show、hide語句的 with 子句。它也可以和 renpy.with_statement()renpy.transition()Show() and Hide() 行為和一系列接受轉場的config變數一起使用。 字典層*不會*在不能作用於層的功能上起作用,比如ATL,ComposeTransition()MultipleTransition()

這可能與導致轉場發生的語句互動不佳,就像由 window auto 產生的轉場。這通常可以透過適用於不同層次的第二個字典轉場來解決。舉例來說,如果你發現當對話窗口顯示和隱藏時出現了奇怪的閃動,試著把 options.rpy改成:

define config.window_show_transition = { "screens" : Dissolve(.25) }
define config.window_hide_transition = { "screens" : Dissolve(.25) }

因為對話窗口整個都在界面(screen)層上所以可以修復這個問題。