動畫和變換語言(簡稱ATL)提供了一種高級方式實現可視組件的展示、界面布置、應用各種變換(比如旋轉、alpha遮罩)等。ATL語言可以根據時間變化實現那些效果,也可以對事件類消息做出響應。
在Python中,與ATL變換等效的是 Transform()
類組件。目前沒有辦法通過編程創建一個ATL變換效果。
ATL可以包含在Ren’Py腳本語句中。
transform
語句創建了一個變換(transform)效果,可以在某個at分句中使用。transform語句的語法如下:
atl_transform ::= "transform"name
"("parameters
")" ":"atl_block
transform語句必須在初始化時運行。如果在 init
語句塊(block)之外發現transform語句,其會被自動放入一個 init
語句塊中並設置其優先度為0。定義的transform可能需要一些參數,被調用時必須提供。
name 必須是一個Python標識符。使用ATL創建出的transform與 name 綁定。:
transform left_to_right:
xalign 0.0
linear 2.0 xalign 1.0
repeat
使用ATL的另一種方法是,在 image
語句中包含ATL語句塊。這將某個圖像與給定的transform綁定。由於沒有辦法向該transform傳入參數,所以只在transform自身定義了某個動畫的情況下才有用。帶ATL語句塊的image語句語法如下:
atl_image ::= "image"image_name
":"atl_block
image eileen animated:
"eileen_happy.png"
pause 1.0
"eileen_vhappy.png"
pause 1.0
repeat
最後一種使用ATL的方法是,包含在 scene
或者 show
語句中。這種方法可以通過ATL變換扭曲圖像。
atl_scene ::=stmt_scene
":"atl_block
atl_show ::=stmt_show
":"atl_block
scene bg washington:
zoom 2.0
show eileen happy:
xalign 1.0
一個ATL語句塊(block)由一個或多個邏輯行組成,使用相同的縮進量。每個ATL語句塊中的邏輯行都必須包含一條或多條ATL語句。
總共有兩種ATL語句:簡單ATL語句和複雜ATL語句。簡單語句不使用ATL語句塊。單條邏輯行就可能包含一條或多條ATL語句,使用英文逗號分隔。複雜語句會包含語句塊(block)。複雜語句的第一行會以英文冒號( ":"
)結尾:
默認情況下,語句塊(block)裡會從第一條語句開始順序執行所有語句。當整個語句塊達到結尾時執行就會被終止。time語句會改變這種執行邏輯,詳見後面的段落。
當語句塊(block)中所有語句都終止時,語句塊的執行也就被終止了。
如果ATL語句需要某個表達式賦值,只能在transform初次加入場景列表時進行賦值。(比如使用 show
語句或者 ui
的函數時。)
下面這些都是ATL語句。
interpolation語句語句是ATL控制變換的主要方式。
atl_interp ::= (warper
simple_expression
| "warp"simple_expression
simple_expression
)? (property
simple_expression
( "knot"simple_expression
)* | "clockwise" | "counterclockwise" | "circles" simple_expression | simple_expression )*
interpolation語句的第一部分用於選擇使用的time-warp函數。(即,將線性時間轉為非線性時間。)可以使用在ATL註冊的warp類函數名,或者使用關鍵字“warp”開頭的某個表達式代表的函數。無論使用的是哪種函數,後面跟著的數字表示整個interpolation過程消耗的時間,單位為秒。
如果沒有給定warp類函數,interpolation過程會瞬間完成。否則就會持續給定的那段時間,至少一幀。
時間warp和範圍值常用於計算完成的進度。這個進度透過各項interpolation占據整個interpolation語句的總進度來計算。每個interpolation執行前,先取進度值。warp類返回的結果就是完成進度。
interpolation語句可以包含一些其他分句。若出現了特性(property)和對應的值,在interpolation結尾,特性(property)就能獲得那個值。該值的獲得可以透過以下幾種方式:
如果出現的是簡單表達式,其可以簡化為一個變換(transform),這個變換是一個最簡單的interpolate語句,不包含warp、spline或者circular行為。變換(transform)中的各項特性(property)會如同直接包含在interpolation語句中一般被處理。
一些interpolation語句樣例如下:
show logo base:
# 在界面的右上角顯示logo。
xalign 1.0 yalign 0.0
# 將某物平移到左端,耗時1.0秒。
linear 1.0 xalign 0.0
# 將某物移動至正中央(truecenter),耗時1秒。使用ease的warp效果實現。
ease 1.0 truecenter
# 暫停1秒。
pause 1.0
# 設置旋轉圓心
alignaround (.5, .5)
# 使用circular運動帶著我們旋轉並從界面頂端離開。
# 耗時2秒鐘。
linear 2.0 yalign 0.0 clockwise circles 3
# 使用spline運動環繞界面移動。
linear 2.0 align (0.5, 1.0) knot (0.0, .33) knot (1.0, .66)
一種重要的特殊情況是暫停warper,pause後面只跟一個時間值,觸發ATL暫停對應的時間。
有些特性(property)可以使用多種類型的值。例如,xpos特性可以是int、float或者absolute類型。如果某個interpolation特性的新舊兩個值是不同的數據類型,具體表現是未定義的。
time
語句是一種簡單控制語句。其包含一個簡單表達式,可以簡化為一個給定的時間,單位為秒。這個給定的時間表示其所在語句塊(block)的執行總時長。
atl_time ::= "time" simple_expression
當time語句中給定的“time”結束後,後面的語句才會開始執行。在上一個語句還在執行的情況下,這種控制轉換依然會執行,也能強行終止任意優先度的語句。
time語句也暗示了可以放在pause語句前面,就可以實現暫停無限長時間。這表示如果主控流程不能抵達time語句處,它就會保持等待直到time語句獲取流程控制權。
當一個語句塊(block)中存在多個time語句時,它們會嚴格按順序疊加。
image backgrounds:
"bg band"
time 2.0
"bg whitehouse"
time 4.0
"bg washington"
表達式語句是一種以簡單表達式開頭的簡單語句。可能會帶一個分句,是另一個簡單表達式。
atl_expression ::=simple_expression
("with"simple_expression
)?
第一個簡單表達式可能等效的東西有三種:
image atl example:
# 顯示logo_base.png
"logo_base.png"
# 暫停1.0秒
1.0
# 使用溶解效果顯示logo_bw.png
"logo_bw.png" with Dissolve(0.5, alpha=True)
# 運行名為move_right的tranform.
move_right
atl_pass ::= "pass"
pass
語句是一個簡單語句,不會觸發任何效果。pass語句可以用於分隔其他語句。比如出現兩套choice語句的時候,如果不用pass語句,選項會混在一起。
repeat
語句是一種簡單語句,包含它的語句塊(block)會從開頭重新執行。如果repeat中出現了一個表達式,該表達式可以計算出一個整數。這個整數就是整個語句塊(block)重複執行的次數。(“repeat 2”表示語句塊最多會執行2次。)
atl_repeat ::= "repeat" (simple_expression
)?
repeat語句必須是一個語句塊(block)的最後一個語句:
show logo base:
xalign 0.0
linear 1.0 xalign 1.0
linear 1.0 xalign 0.0
repeat
block
語句是一種複雜語句,包含了ATL語句塊(block)。block語句用於對需要重複運行的語句分組。
atl_block_stmt ::= "block" ":"
atl_block
label logo base:
alpha 0.0 xalign 0.0 yalign 0.0
linear 1.0 alpha 1.0
block:
linear 1.0 xalign 1.0
linear 1.0 xalign 0.0
repeat
choice
語句是一種複雜語句,其定義了一個所有可選項的集合。Ren’Py會選取集合中的某一個選項,執行與該選項相關的ATL語句塊(block),之後跳轉到choice語句塊結束處。
atl_choice ::= "choice" (simple_expression
)? ":"atl_block
choice語句會將語句塊(block)中連續出現的多個choice選項都放入一個選項集之中。如果選項後面出現一個簡單表達式,這個表達式的值應該是一個浮點數,表示對應選項的權重;如果沒有權重表達式,預設值為1.0。
image eileen random:
choice:
"eileen happy"
choice:
"eileen vhappy"
choice:
"eileen concerned"
pause 1.0
repeat
parallel
語句用於定義一個可以並行執行的ATL語句塊的集。
atl_parallel ::= "parallel" ":"
atl_block
parallel語句會將語句塊(block)中連續出現的多個parallel項都放入一個並行集之中。當整個語句塊中所有語句都執行完後,parallel語句才會終止。
語句塊中的所有並行語句都應各自獨立,並使用不同的特性(property)參數。當兩個並行分支修改了同一項特性(property),會產生無法預料的結果。
show logo base:
parallel:
xalign 0.0
linear 1.3 xalign 1.0
linear 1.3 xalign 0.0
repeat
parallel:
yalign 0.0
linear 1.6 yalign 1.0
linear 1.6 yalign 0.0
repeat
event
語句是一個簡單語句,其會使用給定的名稱觸發一個事件(event)。
atl_event ::= "event" name
當在某個語句塊(block)運行過長中出現某個事件(event)時,語句塊會檢查自身是否存在對應事件名的處理器(handler)。如果處理器存在,主控流程會切換到對應的事件處理器。否則,事件會廣播至所有事件處理器。
on
語句是一種複雜語句,其定義事件處理器(handler)。on語句會將語句塊(block)中連續出現的多個on項都放入一個事件集之中。on語句可以只處理某一個事件名,或者使用逗號分隔的事件名列表。
atl_on ::= "on"name
[ ","name
] * ":"atl_block
on語句用於處理各種事件(event)。當某個事件被處理後,其他的事件處理就會停止,並且會立即進入新事件的處理流程。當某個事件處理器沒有新的待處理事件,就會產生 default
事件(已經處理 default
事件的情況除外)。
on語句的執行不會自然終止。(但是其可以被time語句,或者關聯的事件處理器終止。)
show logo base:
on show:
alpha 0.0
linear .5 alpha 1.0
on hide:
linear .5 alpha 0.0
transform pulse_button:
on hover, idle:
linear .25 zoom 1.25
linear .25 zoom 1.0
contains
語句將可視組件安置在ATL的transform中。(作為transform的子組件。)總共有兩類contains語句的變種。
contains表達式變種使用某個表達式,將表達式設為transform的子組件。當希望ATL的transform容納而不是引用另一個ATL的transform時,這個變種就會有用。
atl_contains ::= "contains" expression
transform an_animation:
"1.png"
pause 2
"2.png"
pause 2
repeat
image move_an_animation:
contains an_animation
# 如果我們不使用contains語句,
# 就會一直處於循環中並不能抵達這裡
xalign 0.0
linear 1.0 yalign 1.0
contains語句塊(block)允許我們定義一個ATL語句塊(block)用作ATL transform的子組件。一個或多個contains語句塊(block)會被組合,在 Fixed()
函數中扭曲(warp),並設置為該transform的子組件。
atl_counts ::= "contains" ":"
每個語句塊都應該定義一個使用的可視組件,或者可能發生的錯誤。contains語句的執行是即時的,不會等待子組件的完成。contains語句可以說是語法糖,使我們很容易將參數傳給它的子組件。 (譯者註:語法糖(Syntactic Sugar),也稱作糖衣語法。由英國電腦科學家彼得·約翰·蘭達(Peter J. Landin)發明。指計算機語言中添加的某種語法,對語言的功能並沒有影響,能更方便程式設計師使用。通常來說使用語法糖能夠增加程序的可讀性,從而減少程式碼出錯的機會。)
image test double:
contains:
"logo.png"
xalign 0.0
linear 1.0 xalign 1.0
repeat
contains:
"logo.png"
xalign 1.0
linear 1.0 xalign 0.0
repeat
function
語句允許ATL使用Python函數控制ATL特性(property)。
atl_function ::= "function" expression
這些函數與 Transform()
具有相同的識別標誌:
除了修改第一個入參中的Transform對象之外,該函數不應該包含其他作用。 在可以在任意時間傳入任意值,以啟用預載入。
init python:
def slide_function(trans, st, at):
if st > 1.0:
trans.xalign = 1.0
return None
else:
trans.xalign = st
return 0
label start:
show logo base:
function slide_function
pause 1.0
repeat
使用 animation
語句時,必須將其放在整個ATL語句塊的開頭,告訴Ren’Py該語句將使用動畫時間軸。
atl_animation ::= "animation"
與普通的現實時間軸相比,在帶有相同標籤(tag)的圖像(image)或界面(screen)開始顯示的那一刻,animation時間軸就將進行計時並被所有相同標籤(tag)的圖像和界面共享。 animation時間軸常用於動畫過程中的圖像替換。例如:
image eileen happy moving:
animation
"eileen happy"
xalign 0.0
linear 5.0 xalign 1.0
repeat
image eileen vhappy moving:
animation
"eileen vhappy"
xalign 0.0
linear 5.0 xalign 1.0
repeat
label start:
show eileen happy moving
pause
show eileen vhappy moving
pause
這個例子中,艾琳的立繪表情將在第一個 pause 語句處改變,但她的位置不會改變。 因為兩個動畫使用相同的animation時間軸,避免了更換立繪後出現圖像位置不連續。 不使用 animation 語句的話,用戶通過點擊滑鼠或螢幕後,角色的立繪位置將發生一次重設。
warper是一類函數,其可以改變interpolation語句中定義的時間值。以下warper都是默認定義的。他們將時間t轉換為t’,t和t’都是浮點數,t會將給定的時間值標準化為0.0到1.0。(如果該語句給定的原時長是0,那運行時t就是1.0。)t’的初始取值範圍也是0.0到1.0,不過可以超出這個範圍。
pause
linear
ease
easein
easeout
除此之外,Robert Penner的easing函數都是支持的。為了避免與上面的幾個函數名重複,有些函數名字修改過。這些標準函數的圖像可以在這個網站上查看 http://www.easings.net/
Ren’Py中函數名 | easings.net中函數名 |
---|---|
ease_back | easeInOut_back |
ease_bounce | easeInOut_bounce |
ease_circ | easeInOut_circ |
ease_cubic | easeInOut_cubic |
ease_elastic | easeInOut_elastic |
ease_expo | easeInOut_expo |
ease_quad | easeInOut_quad |
ease_quart | easeInOut_quart |
ease_quint | easeInOut_quint |
easein_back | easeOut_back |
easein_bounce | easeOut_bounce |
easein_circ | easeOut_circ |
easein_cubic | easeOut_cubic |
easein_elastic | easeOut_elastic |
easein_expo | easeOut_expo |
easein_quad | easeOut_quad |
easein_quart | easeOut_quart |
easein_quint | easeOut_quint |
easeout_back | easeIn_back |
easeout_bounce | easeIn_bounce |
easeout_circ | easeIn_circ |
easeout_cubic | easeIn_cubic |
easeout_elastic | easeIn_elastic |
easeout_expo | easeIn_expo |
easeout_quad | easeIn_quad |
easeout_quart | easeIn_quart |
easeout_quint | easeIn_quint |
我們可以在一個 python early
語句塊中,使用 renpy.atl_warper
構造器定義新的warper函數。定義warper函數文件需要在使用那個函數的其他任何文件之前被處理。定義的代碼如下:
python early hide:
@renpy.atl_warper
def linear(t):
return t
transform存在以下特性(property):
當給定的數據類型當作一個坐標時,其可能是一個整型、 absolute
類型或者浮點型。如果是一個浮點型,其可以用作某塊區域(用作坐標 pos
)或者可視組件(用作錨點 anchor
)的比例數值。
需要注意的是,並非所有特性都是完全獨立的。例如, xalign
和 xpos
都會更新同一批底層數據。在parallel語句中,只有一個語句塊(block)能調整水平坐標,而另一個語句塊只能調整垂直坐標。(這些可能都是在同一個語句塊中。)angle和radius特性同時設置水平和垂直坐標。
pos
linkType: | (position, position) |
---|---|
Default: | (0, 0) |
相對坐標,以整個區域左上角為原點。
xpos
linkType: | position |
---|---|
Default: | 0 |
水平坐標,以整個區域的左邊為坐標零點。
ypos
linkType: | position |
---|---|
Default: | 0 |
垂直坐標,以整個區域的頂邊為坐標零點。
anchor
linkType: | (position, position) |
---|---|
Default: | (0, 0) |
錨點坐標,以可視組件左上角為原點。
xanchor
linkType: | position |
---|---|
Default: | 0 |
錨點的水準坐標,以可視組件左邊為坐標零點。
yanchor
linkType: | position |
---|---|
Default: | 0 |
錨點的垂直位置,以可視組件頂邊為坐標零點。
align
linkType: | (float, float) |
---|---|
Default: | (0.0, 0.0) |
將pos和anchor設置為相同的值。
xalign
linkType: | float |
---|---|
Default: | 0.0 |
將xpos和xanchor設置為相同的值。
yalign
linkType: | float |
---|---|
Default: | 0.0 |
將ypos和yanchor設置為相同的值。
xoffset
linkType: | float |
---|---|
Default: | 0.0 |
可視組件在水平方向偏離的像質數。向右偏離時是正數。
yoffset
linkType: | float |
---|---|
Default: | 0.0 |
可視組件在垂直方向偏離的像質數。向下偏離時是正數。
xcenter
linkType: | float |
---|---|
Default: | 0.0 |
將xpos設置為指定的特性值(整個區域xpos最大值的一半),將xanchor設置為0.5。
ycenter
linkType: | float |
---|---|
Default: | 0.0 |
將ypos設置為指定的特性值(整個區域ypos最大值的一半),將yanchor設置為0.5。
rotate
linkType: | float 或 None |
---|---|
Default: | None |
若值為None,不會進行旋轉。否則,圖像會按指定的角度順時針旋轉。根據下面會提到的rotate_pad的配置值,旋轉可視組件會導致組件尺寸改變。xanchor和yanchor不為0.5的情況下,旋轉整個可視組件會讓組件相對整個界面的坐標發生變化。
rotate_pad
linkType: | boolean |
---|---|
Default: | True |
若該值為True,一個可以旋轉的可視組件就會使用原本的寬度和高度填充旋轉矩形,並確保旋轉時不會改變組件的尺寸。若該值為False,transform會給定某個能應用於可視組件的最小尺寸,更適合用於自動匹配的旋轉。
transform_anchor
linkType: | boolean |
---|---|
Default: | False |
若該值為True,錨點會定位在關聯的子組件上,當子組件發生變換時拉伸並旋轉。實際效果是,當子組件拉伸或旋轉時,這項值可以指定子組件以指定的錨點拉伸或旋轉。
zoom
linkType: | float |
---|---|
Default: | 1.0 |
該值根據係數對可視組件進行縮放。
xzoom
linkType: | float |
---|---|
Default: | 1.0 |
該值根據係數對可視組件在水平方向進行縮放。負值可以讓圖像水平翻轉(即與原圖像互為左右鏡像)。
yzoom
linkType: | float |
---|---|
Default: | 1.0 |
該值根據係數對可視組件在垂直方向進行縮放。負值可以讓圖像垂直翻轉(即與原圖像互為上下鏡像)。
nearest
linkType: | boolean |
---|---|
Default: | None |
若該值為True,可視組件及其子組件會使用近鄰取樣(nearest-neighbor)過濾繪製。若該值為False,可視組件及其子組件使用雙線性(bilinear)過濾繪製。若該值為None,繪製方式從父組件繼承,或者採用 config.nearest_neighbor
配置(預設值是false)。
alpha
linkType: | float |
---|---|
Default: | 1.0 |
該值控制可視組件的透明度。
alpha變換(transform)會分別作用於每個圖像所包含的子組件。在子組件存在重疊部門的情況,這可能會導致一些不期望出現的結果,比如透過衣服看到角色之類的。
Flatten()
類可視組件可以解決這些問題。
additive
linkType: | float |
---|---|
Default: | 0.0 |
該值控制Ren’Py加性混合後的表現效果。該值為1.0時,Ren’Py使用ADD操作器(operator)繪製;該值為0.0時,Ren’Py使用OVER操作器(operator)繪製。
加性混合會分別作用於transform的每一個子組件。
完全的加性混合不會改變目標圖像的alpha通道值,並且添加上去的圖像可能不是可見的,前提是那些圖像沒有直接繪製在某個不透明的表面上。(某些複雜的操作,像 Flatten()
, Frame()
和某些轉場,使用加性混合可能會出現問題。)
Warning
加性混合只被基於硬體的渲染器支持,比如OpenGL和DirectX/ANGLE渲染器。軟體渲染器無法正確繪製加性圖像。
圖形系統啟動後,如果加性混合可以被支持的話 renpy.get_renderer_info()["additive"]
的值會是true。
around
linkType: | (position, position) |
---|---|
Default: | (0.0, 0.0) |
若該值非None,則指定了極坐標系的中心點坐標值,以整個區域的左上角為原點。在position模式下,設置的中心點可用於圓周運動。
alignaround
linkType: | (float, float) |
---|---|
Default: | (0.0, 0.0) |
若該值非None,則指定了極坐標系的中心點坐標值,以整個區域的左上角為原點。在align模式下,設置的中心點可用於圓周運動。
angle
linkType: | float |
---|
獲取極坐標系中角度的值。極坐標中心未設置的情況下不能獲取。
radius
linkType: | position |
---|
獲取極坐標系中半徑的值。極坐標中心未設置的情況下不能獲取。
crop
linkType: | None 或 (int, int, int, int) 或 (float, float, float, float) |
---|---|
Default: | None |
若該值非None,會使用給定的矩形剪裁可視組件。指定的矩形是一個(x, y, width, height)形式的元組。如果 crop_relative
為True並且元組內元素的值是浮點數(float),width和height用作比例值,與原圖像的寬和高分別相乘輸出結果。否則,數值代表像質數。
如果各種corner特性與crop特性同時出現,crop的優先度高於各種corner特性。
crop_relative
linkType: | boolean |
---|---|
Default: | False |
如果crop_relative為True,crop元組裡的width和height用作分數,與原圖像的寬和高分別相乘輸出結果。
corner1
linkType: | None 或 (int, int) |
---|---|
Default: | None |
若該值非None,給定了剪裁框的左上角坐標。crop優先度高於該項。
corner2
linkType: | None 或 (int, int) |
---|---|
Default: | None |
若該值非None,給定了剪裁框的右下角坐標。crop優先度高於該項。
size
linkType: | None 或 (int, int) |
---|---|
Default: | None |
若該值非None,將可視組件伸縮至給定的尺寸。
fit
linkType: | None 或 string |
---|---|
Default: | None |
若該值非None,會按下面表格的方式調整尺寸。表格中的“維度”視 xsize
和 ysize
不為空的情況而定。
值 | 描述 |
---|---|
contain |
在不超過任何維度尺寸的原則下近可能大。保持寬高比。 |
cover |
在不超過任何維持尺寸的原則下儘可能小。保持寬高比。 |
None 或 fill |
將可視組件拉伸/擠壓,以匹配各維度指定大小。 |
scale-down |
類似 contain ,但不會增加可視組件的尺寸。 |
scale-up |
類似 cover ,但不會增加可視組件的尺寸。 |
maxsize
linkType: | None 或 (int, int) |
---|---|
Default: | None |
若該值非None,可以使可視組件在box當中以合適的尺寸放大或縮小顯示,同時保持橫縱比。(請注意,這意味著長或寬其中一個尺寸可能小於此box的尺寸。)
subpixel
linkType: | boolean |
---|---|
Default: | False |
若該值為True,使用子像素(subpixel)坐標系統在界面上放置子物體。
子像素(subpixel)位置會對繪入像素的色彩(包括不透明度)產生影響,但不會對象素原來的色彩產生影響。 當子像素位置與運動圖像一起出現時(常見情況),圖像應該在運動方向保留一點透明的邊。
舉例來說,如果某個角色精靈(sprite)會水平移動,最好在左右兩側遇到透明的邊界。 避免出現角色邊緣與背景顏色發生混合的問題。
delay
linkType: | float |
---|---|
Default: | 0.0 |
如果某個變換(transform)如同轉場(transition)般使用,這個值定義了轉場時間。
events
linkType: | boolean |
---|---|
Default: | True |
若該值為True,事件消息會傳給變換(transform)的子組件。若該值為False,事件消息會被屏蔽。(這個機制可以用在ATL變換中,放置事件消息達到某些old_widget。)
xpan
linkType: | None 或 float |
---|---|
Default: | None |
若該值非None,其被解釋為某個360度全景圖中的經度。圖像中央是0度,圖像左端和右端分別是-180度和180度。
ypan
linkType: | None 或 float |
---|---|
Default: | None |
若該值非None,其被解釋為某個360度全景圖中的緯度。圖像中央是0度,圖像頂部和底部分別是-180度和180度。
xtile
linkType: | int |
---|---|
Default: | 1 |
圖像水平方向使用tile方式碼放圖像的次數。(如果給定了xpan的值則忽略本項。)
ytile
linkType: | int |
---|---|
Default: | 1 |
圖像垂直方向使用tile方式碼放圖像的次數。(如果給定了ypan的值則忽略本項。)
matrixcolor
linkType: | None 或 矩陣 或 MatrixColor對象 |
---|---|
Default: | None |
若該值非None,該特性值用於將此變換一下的所有子組件上色。詳見 Matrixcolor 。
blur
linkType: | None 或 float |
---|---|
Default: | None |
使用 blur 像質數模糊圖像的子組件, blur 數值不超過可視組件的邊長。 Ren’Py不同版本的模糊細節可能存在差異。模糊的結果可能存在瑕疵,尤其是模糊數值不斷發生修改的情況下。
使用該特性的前提是啟用基於模型的渲染器,將 config.gl2
設置為True。
此外,其他幾組變換特性可以在文件其他地方找到:
perspective
、 matrixanchor
、 matrixtransform
、 zpos
、 zzoom
blend
、 mesh
、 mesh_pad
、 shader
u_
開頭的特性可以用於 自訂著色器 中的uniform變數。這些特性按照以下順序應用:
當某個interpolation語句匯總包含關鍵字 clockwise
或 counterclockwise
,這個語句就會觸發圓周運動。Ren’Py會比較起始坐標點並找出極坐標中心。Ren’Py接著會計算運動角度。如果還出現了circles分句,Ren’Py會確保旋轉對應的圈數。
Ren’Py會合理運用angle和radius特性,觸發圓周運動。如果transform處於align模式,設置angle和radius同時也會設置align特性。否則,就會設置pos特性。
下列事件是自動觸發的:
start
on
語句時觸發,前提是沒有更高優先度的事件出現。show
show
或者 scene
語句顯示transform,並且給定標籤(tag)沒有對應已顯示的圖像時觸發。replace
show
語句中的transform根據給定標籤(tag)替換某個圖像時觸發。hide
使用 hide
語句或等效的python語句中的transform時觸發。
需要注意的是,transform被scene語句清除,或者退出其所在的上下文(比如退出遊戲菜單)時,hide事件是不會觸發的。
replaced
update
hover
, idle
, selected_hover
, selected_idle