목차

이전 항목

트랜지션

다음 항목

스타일

링크


원문 보러 가기
오역 신고하기
Created using Sphinx.

ATL

애니메이션 및 트랜스포매이션 언어, 즉 ATL은 화면에 출력할 디스플레이어블을 선택하거나, 선택한 디스플레이어블을 화면에 배치하거나, 회전, 확대시키거나 투명도를 수정하는 등 디스플레이어블에 변환효과를 적용할 때 사용되는 고급 언어입니다. 시간이 지남에 따라 디스플레이어블의 모양이 바뀌거나 이벤트에 따라 반응하도록 만들 수도 있습니다.

ATL 트랜스폼에 상응하는 함수는 Transform() 디스플레이어블입니다. 프로그램 방식으로 ATL 트랜스폼을 만드는 방법은 없습니다.

렌파이 스크립트 명령문

ATL 코드는 렌파이 스크립트 명령문의 일부입니다.

transform 문

transform 문은 at 절에 전달할 변환 효과인 트랜스폼을 만듭니다. 문법은 다음과 같습니다.:

atl_transform ::=  "transform" name "(" parameters ")" ":"
                      atl_block

transform문은 초기화 단계에 실행되어야 합니다. 이 명령문이 init 블럭 외부에 있다면 자동으로 우선도가 0인 init 블럭 안에 배치됩니다. transform문에는 트랜스폼에 필요한 매개 변수 리스트를 입력할 수도 있습니다.

Name 은 반드시 파이썬 식별자이어야 합니다. ATL블럭으로 만든 transform은 이 이름에 바인딩됩니다.

transform left_to_right:
    xalign 0.0
    linear 2.0 yalign 1.0
    repeat

ATL블럭과 image문

ATL을 사용하는 두 번째 방법은 image문의 일부로써 ATL을 함께 사용하는 것입니다. 이 때 이미지 이름에는 ATL블럭에 입력한 트랜스폼이 바인딩 됩니다. 트랜스폼에는 매개 변수를 전달할 수 없으므로 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문

scene이나 show문과 ATL을 결합해 사용할 수도 있습니다. 이 때 트랜스폼은 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 문법과 의미론

ATL 블럭은 모두 동일한 공백으로 들여쓰기된 하나 이상의 논리행으로 이루어져 있으며 ATL 내에 있는 블럭이나 명령문에 맞춰 들여쓰기가 되어야합니다. ATL블럭 안에 있는 논리행은 하나 이상의 ATL 명령문을 포함해야 합니다.

ATL 명령문에는 단순한 명령문과 복잡한 명령문이 있습니다. 단순한 명령문은 ATL 블럭을 받지 않습니다. 논리행은 쉼표로 분리된 하나 혹은 그 이상의 ATL 명령문을 포함합니다. 복잡한 명령문은 블럭을 포함하며 고유의 행에 홀로 입력되어있어야 합니다. 복잡한 명령문의 첫 번째 행은 항상 콜론(:)으로 끝납니다.

일반적으로 블럭 안에 있는 명령문은 나타나는 순서대로, 즉 블럭 안에 있는 첫 번째 명령문부터 실행됩니다. 블럭 끝에 도달하면 실행이 종료됩니다. time 문을 사용하면 이러한 동작 방식을 바꿀 수 있습니다. time 문에 대한 자세한 내용은 밑에 있는 해당 섹션에서 확인할 수 있습니다.

블럭 안에 있는 모든 명령문이 종료된 경우에는 블럭도 종료됩니다.

표현식을 계산해야 하는 ATL문이 있다면, 그 식에 대한 계산은 장면 목록에 트랜스폼이 처음 추가되는 때에 일어납니다(예를 들면 show 문이나 ui 함수를 사용하는 경우).

ATL 명령문

다음은 ATL명령문에 관한 내용입니다.

보간문

보간문은 ATL이 트랜스폼을 제어하는 주된 방법입니다.

atl_interp ::=  ( warper `단순 표현식` | "warp" `단순 표현식` `단순 표현식` )?
                ( property `단순 표현식` ( "knot" `단순 표현식` )*
                | "clockwise"
                | "counterclockwise"
                | "circles" 단순 표현식
                | 단순 표현식 )*

보간문의 첫 번째 부분은 보간을 타임 워프하는 함수를 선택하는 데 사용됩니다(즉, 선형 시간에서 비선형 시간까지의 함수). ATL로 등록한 워퍼에 이름을 정하거나, 함수를 제공하는 식 앞에 "warp" 키워드를 주는 것으로 이를 활용할 수 있습니다. 두 가지 경우 그 다음에는 보간이 받아야 할 초 단위 시간을 지정하는 숫자가 옵니다.

워프 기능이 주어지지 않으면 보간은 0초 동안 pause 기능을 사용하여 실행됩니다.

워퍼warper와 기간duration은 유리수를 계산할 때 사용됩니다. 계산값은 보간에 걸린 시간을 보간 기간으로 나눈 결과값입니다. 이 값은 기간과 결합해 워퍼에 전달됩니다. 워퍼가 반환하는 결과물은 유리수입니다.

보간문은 다른 절의 숫자를 포함할 수 있습니다. 속성과 값이 존재할 때, 값은 명령문 끝에서 속성이 받을 값입니다. 값은 여러 방법으로 얻을 수 있습니다:

  • 값 다음에 하나 혹은 두 개의 놋knot이 적히면 , 스플라인 모션이 사용됩니다. 시작 지점은 보간 시작 지점의 속성 값이며, 종료 지점은 그 속성 값이고, 스플라인을 컨트롤하기 위한 놋이 사용됩니다.
  • 보간문에 "clockwise"나 "counterclockwise" 절이 있다면 아래 묘사한 대로 원형 움직임이 사용됩니다.
  • 그 외의 경우에 값은 유리수를 이용하여 시작 위치와 종료 위치에 선형 보간됩니다.

단순 표현식이 존재한다면, 그것으로 하나의 보간문만 있는(워퍼도 없고 스플라인도 원형 움직임도 없는) 변환효과를 계산할 것입니다. 변환효과의 속성은 이 명령문에 포함된 것처럼 처리될 것입니다.

아래는 보간문의 예제입니다.:

show logo base:
    # 화면 우측 상단에 로고 표시
    xalign 0.0 yalign 1.0

    # 1초 동안 이미지를 왼쪽으로 움직임
    linear 1.0 xalign 0.0

    # 1초 동안 truecenter transform으로 특정한 곳까지 움직임
    # 이를 위해 ease wrapper 사용
    ease 1.0 truecenter

    # 1초 동안 멈춤
    pause 1.0

    # 빙빙 도는 위치 지정
    alignaround (.5, .5)

    # 화면 상단 밖으로 빙빙 도는 움직임을 나타내기 위해
    # circular motion 사용. 2초 동안 움직임
    linear 2.0 yalign 0.0 clockwise circles 3

    # 화면 주변으로 움직이기 위한 물결무늬 모션 사용
    linear 2.0 align (0.5, 1.0) knot (0.0, .33) knot (1.0, .66)

특별한 예외로 시간값 외에는 아무것도 적지 않는 pause 워퍼가 있으며, 지정한 시간동안 ATL이 일시 정지하도록 합니다.

일부 속성에는 여러가지 타입의 값을 입력할 수도 있습니다. 예를 들어 xpos 속성은 정수, 부동 소수점 숫자, 절대값을 입력할 수 있습니다. 보간이 이전 값과 다른 종류의 새 값을 가지고 있다면 동작은 정의되지 않습니다.

time 문

time문은 단순 조작문입니다. 지정할 시간을 계산하기 위한 단순 표현식을 하나 받으며, 이 때 단순 표현식은 명령문이 포함된 블럭이 실행되었을 때부터 초 단위로 계산됩니다.

atl_time ::=  "time" `단순 표현식`

주어진 시간이 적힌 명령문에 도달한 경우 다음 명령문이 실행되기 시작됩니다. 이전 명령문이 여전히 실행중이더라도 제어 흐름을 전송시키며, 그로 인해 이전 명령문들도 즉시 종료합니다.

Time문은 절대적으로 pause문에 선행합니다. 이것은 제어 흐름이 time문에 도달한 경우에 time문이 실행될 동안 충분히 대기한다는 것을 의미합니다.

하나의 블럭에 여러 개의 time문이 있을 경우, time 문에 적힌 시간은 반드시 차례대로 증가해야 합니다.

image backgrounds:
    "bg band"
    time 2.0
    "bg whitehouse"
    time 4.0
    "bg washington"

expression 문

expression문은 단순 표현식으로 시작하는 단순 명령문입니다. with절에 두 번째 단순 표현식이 포함될 수도 있습니다.

atl_expression ::=   `단순 표현식` ("with" `단순 표현식`)?

첫 번째 단순 표현식은 다음의 세 가지로 계산될 수 있습니다.:

  • 트랜스폼이라면 트랜스폼이 실행됩니다. 트랜스폼을 받으면 with 절은 무시합니다.
  • 정수나 부동 소수점 숫자라면, 일시 정지가 실행되는 시간으로 받아들입니다.
  • 그 외의 경우에 표현식은 디스플레이어블로 해석됩니다. 이 디스플레이어블은 with절이 실행되면 트랜스폼의 하위 디스플레이어블을 대체하여 애니메이션에 유용하도록 만듭니다. with절이 존재한다면 두 번째 연산식은 트랜지션으로 계산하고 트랜지션이 이전과 새로운 디스플레이어블에 적용됩니다.
image atl example:
     # logo_base.png 표시
     "logo_base.png"

     # 1.0초 동안 멈춤
     1.0

     # dissolve 하면서 logo_bw.png 표시
     "logo_bw.png" with Dissolve(0.5, alpha=True)

     # move_right 실행.
     move_right

pass 문

atl_pass ::=  "pass"

pass문은 아무것도 발생시키지 않는 단순 명령문입니다. 두 세트의 choice문이 있을 때 pass문을 사용하지 않으면 선택지가 연이어 실행되는데, 이처럼 명령문을 나누고 싶은 경우 사용할 수 있습니다.

repeat 문

repeat문은 블럭의 시작 지점부터 실행을 반복하는 단순 명령문입니다. 연산식이 있다면 주어진 식을 계산해 블럭이 실행될 횟수를 정합니다(따라서 "repeat 2"로 끝나는 블럭은 2번 실행됩니다).

atl_repeat ::=  "repeat" (`단순 표현식`)?

repeat문은 블럭 내에서 마지막 명령문이 되어야 합니다.:

show logo base:
    xalign 0.0
    linear 1.0 xalign 1.0
    linear 1.0 xalign 0.0
    repeat

block 문

block문은 ATL 코드 블럭을 포함하는 복합 명령문입니다. 명령문 그룹을 반복할 때에 사용할 수 있습니다.

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 문

choice문은 선택이 가능한 세트 중 하나를 정의하는 복합 명령문입니다. 렌파이는 세트 내에 있는 것들 중 하나를 선택하여 그것과 관련된 ATL 블럭을 실행하고, choice 블럭들 중에서 마지막 choice 블럭 다음에 적힌 명령문을 계속 실행할 것입니다.

atl_choice ::=  "choice" (`단순 표현식`)? ":"
                    atl_block

choice문은 같은 블럭 안에 하나 이상의 choice문이 연속적으로 나타나는 경우에 choice 문들을 세트로 묶습니다. 단순 표현식 이 지정되었다면, 그것은 부동 소수점이 되어 블럭에 그만큼의 비중을 두게 하고, 그 외의 경우에는 기본값을 1.0으로 간주합니다.

image eileen random:
    choice:
        "eileen happy"
    choice:
        "eileen vhappy"
    choice:
        "eileen concerned"

    pause 1.0
    repeat

parallel 문

parallel문은 ATL 블럭 세트를 정의해 병렬적으로 실행할 때 사용합니다.

atl_parallel ::=  "parallel" ":"
                     atl_block

parallel문은 하나 이상의 parallel문이 같은 블럭에 연속으로 나타나는 경우에 parallel문을 세트로 묶습니다. 그리고 모든 parallel 문 블럭들은 동시에 실행됩니다. parallel문은 마지막 블럭이 끝날 경우 종료됩니다.

세트 내에 있는 블럭들은 각각 독립적이어야 하며 서로 다른 속성을 조작해야 합니다. 두 parallel 블럭이 같은 속성을 변경한다면 결과물은 정의되지 않습니다.

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

블럭 내에서 이벤트가 생산되면, 그 블럭은 event 문에서 지정한 이벤트의 처리기가 있는지 체크합니다. 이벤트 처리기가 있다면 제어 흐름은 이벤트 처리기에 전송됩니다. 그 외의 경우에 이벤트는 모든 이벤트 처리기에 전파됩니다.

on 문

on문은 이벤트 처리기를 정의하는 복합 명령문입니다. on문들은 하나의 명령문으로 그룹화 됩니다. on문은 이벤트 하나 또는 쉼표로 구분된 이벤트 이름의 리스트를 처리할 수 있습니다.

atl_on ::=  "on" name ":"
                 atl_block

on문은 이벤트를 처리하기 위해 사용됩니다. 이벤트가 처리되면 다른 모든 이벤트들의 처리가 종료되며, 새로운 이벤트의 처리가 즉시 시작됩니다. 이벤트 처리기가 다른 이벤트의 발생 없이 종료되면 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 문

contains문은 ATL transform이 포함한 디스플레이어블을 설정합니다 (transform의 하위 디스플레이어블). contains문에는 두 가지 종류가 있습니다.

contains expression는 표현식을 입력 받으며 그 표현식을 transform의 하위 디스플레이어블로 설정합니다. ATL transform이 두 번째 ATL transform을 (전체를 구성하는 일부로서 포함하는 것 보다는) 내용물로서 포함하길 원하는 경우에 contains문을 사용하면 유용합니다.

atl_contains ::=  "contains" expression
transform an_animation:
    "1.png"
    pause 2
    "2.png"
    pause 2
    repeat

image move_an_animation:
    contains an_animation

    # contains문을 사용하지 않으면 transform an_animation 이 계속 반복되며
    # 이 행에 도달하지 못할 것이다.
    xalign 0.0
    linear 1.0 yalign 1.0

contains 블럭은 ATL 트랜스폼의 하위 디스플레이어블을 위해 ATL블럭을 정의할 수 있도록 합니다. 하나 이상의 contains 블럭 명령문은 세트로 묶일 수 있으며 :func: Fixed 안에 감싸질 수 있고, 트랜스폼의 하위 디스플레이어블로 설정될 수 있습니다.

atl_counts ::=  "contains" ":"

각각의 블럭은 사용할 디스플레이어블을 정의해야하며 그렇지 않으면 에러가 발생할 것입니다. contains 문은 자식들이 완료될 때까지 기다리지 않고 즉시 실행합니다. 이 명령문은 문법적으로 맞지는 않지만 하위 디스플레이어블에 인수가 쉽게 전달될 수 있도록 사용하기 편리하라고 만든 것입니다.

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 문

function문은 ATL에서 파이썬 함수를 이용해 ATL 속성값을 제어할 수 있도록 합니다.

atl_function ::=  "function" expression

함수들은 Transform() 에서 사용되는 것과 동일한 매개변수를 사용합니다.:

  • 첫 번째 인수는 transform객체입니다. Transform 속성을 이 객체에 설정할 수 있습니다.
  • 두 번째 인수는 표시 시간축shown timebase로, 함수가 실행된 이후부터 측정되는 초 단위 시간입니다.
  • 세 번째 인수는 동작 시간축animation timebase입니다. 화면에 같은 태그를 가진 무언가가 있었던 순간부터 측정되는 초 단위 시간입니다.
  • 함수가 숫자값을 반환하면, 이 함수는 초 단위 시간이 경과한 후에 다시 호출됩니다(0초는 가능한 빠른 시간 내에 함수를 다시 부른다는 것을 의미합니다). 함수가 None값을 반환하면 컨트롤은 다음 ATL명령문으로 넘어갑니다.
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

워퍼

워퍼는 보간문이 경과한 것으로 간주하는 시간의 양을 변경하는 함수입니다. 아래의 워퍼는 기본적으로 정의된 것들입니다. t에서 t'까지의 함수로 정의되어 있으며, 여기서 t와 t' 범위는 0.0과 1.0사이의 부동 소수점 숫자입니다(명령문의 기간이 0초라면 t는 실행될 때 1.0입니다).

pause
일시 정지, 그리고 나서 새 값으로 점프. t == 1.0이면, t = 1.0. 그 외에 t' = 0.0.
linear
선형 보간. t' = t
ease
천천히 시작, 속도를 올리고, 속도 줄임. t' = .5 - math.cos(math.pi * t) / 2.0
easein
빠르게 시작 후 속도를 줄임. t' = math.cos((1.0 - t) * math.pi / 2.0
easeout
천천히 시작 후 속도를 올림. t' = 1.0 - math.cos(t * math.pi / 2.0)

새 워퍼는 python early 블럭 내에서 renpy.atl_warper 장식자로 정의될 수 있습니다. 이 데코레이터는 워퍼를 사용하는 모든 파일 이전에 배치해야 합니다. 코드의 형태는 다음과 같습니다.:

python early hide:

    @renpy.atl_warper
    def linear(t):
        return t

트랜스폼 속성 목록

트랜스폼 속성에는 다음과 같은 것들이 있습니다.

입력 받은 속성 종류가 위치라면 정수, renpy.absolute, 혹은 부동소수점이어야 합니다. 부동 소수점 값이면 포함하는 영역(pos)이나 디스플레이어블(anchor) 사이즈의 분수값으로 해석됩니다.

모든 속성값이 독립적이진 않습니다. 예를 들어 xalign과 xpos는 동일한 기본 데이터를 변경합니다. parallel 문에서는 하나의 블럭만이 수평 위치를 조정해야 하며, 하나의 블럭만이 수직 위치들을 조정합니다(이 둘을 동일한 블럭에서 지정할 수도 있습니다). angle과 radius 속성은 수평, 수직위치를 모두 설정합니다.

pos
종류:(위치, 위치)
기본값:(0, 0)

영역의 좌측 상단 모서리 지점을 원점으로 삼아 계산되는 위치.

xpos
종류:위치
기본값:0

영역의 좌측을 원점으로 삼아 계산되는 수평상의 수평상의 위치.

ypos
종류:위치
기본값:0

영역의 상단을 원점으로 삼아 계산되는 수직상의 위치.

anchor
종류:(위치, 위치)
기본값:(0, 0)

디스플레이어블의 좌측 상단을 원점으로 삼아 계산되는 기준점의 위치.

xanchor
종류:위치
기본값:0

디스플레이어블의 좌측을 원점으로 삼아 계산되는 기준점의 위치.

yanchor
종류:위치
기본값:0

디스플레이어블의 상단을 원점으로 삼아 계산되는 기준점의 위치.

align
종류:(부동 소수점, 부동 소수점)
기본값:(0.0, 0.0)

pos와 anchor를 같은 값으로 설정하는 것과 같다.

xalign
종류:부동 소수점
기본값:0.0

xpos와 xanchor를 같은 값으로 설정하는 것과 같다.

yalign
종류:부동 소수점
기본값:0.0

ypos 와 yanchor를 같은 값으로 설정하는 것과 같다.

xoffset
Type:float
Default:0.0

디스플레이어블에 적용할 가로 방향의 여백. 픽셀 단위. 양수값은 여백을 우측 방향으로 증가시킨다.

yoffset
Type:float
Default:0.0

디스플레이어블에 적용할 세로 방향의 여백. 픽셀 단위. 양수값은 여백을 하단 방향으로 증가시킨다.

xcenter
종류:부동 소수점
기본값:0.0

xanchor 는 0.5 로 설정한 채 xpos의 값을 설정하는 것과 같다.

ycenter
종류:부동 소수점
기본값:0.0

yanchor 는 0.5 로 설정한 채 ypos의 값을 설정하는 것과 같다.

rotate
종류:부동 소수점 또는 None
기본값:None

None값이면 회전이 일어나지 않는다. 값을 지정하면, 이미지는 지정한 값만큼 시계방향으로 회전한다. 디스플레이어블이 회전하면 아래에 나와있는 rotate_pad의 설정에 따라 크기가 조정될 수도 있다. xanchor와 yanchor 값이 0.5 가 아닌 경우 위치가 변경될 수 있다.

rotate_pad
종류:True/False
기본값:True

값이 참이면, 회전한 디스플레이어에 빈 공간을 덧대어, 가로 및 세로 길이가 원래의 가로/세로 길이의 빗변과 같아지게 한다. 그리하여 내용물이 회전한 것 때문에 트랜스폼이 사이즈를 변경하지 않도록 한다. 값이 False면, 트랜스폼에는 변환된 디스플레이어블을 포함하는 최소 사이즈가 주어진다. 이 쪽은 고정된 위치에서 회전하는 경우에 적합하다.

transform_anchor
종류:True/False
기본값:False

True면 잘린 하위 디스플레이어블에 기준점이 배치되며 하위 디스플레이어블이 트랜스폼될 때마다 크기가 바뀌거나 회전한다. 이는 실제로 하위 디스플레이어블이 크기가 바뀌거나 회전하는 지점을 기준점으로 만든다.

zoom
종류:부동 소수점
기본값:1.0

지정한 값만큼 디스플레이어블을 확대한다.

xzoom
종류:부동 소수점
기본값:1.0

지정한 값만큼 디스플레이어블을 가로로 확대한다. 음수값을 적으면 이미지가 가로방향으로 반전된다.

yzoom
종류:부동 소수점
기본값:1.0

지정한 값만큼 디스플레이어블을 세로로 확대한다. 음수값을 적으면 이미지가 세로방향으로 반전된다.

nearest
Type:boolean
Default:False

참값이면 근접-이웃 필터링을 사용해 디스플레이어블과 하위 디스플레이어블을 그린다. False 라면 디스플레이어블과 그의 하위 디스플레이어블이 이중 선형 필터링을 사용해 그려진다. None이라면, 부모로부터 설정을 전달 받거나, 기본값이 False인 config.nearest_neighbor 의 값을 받는다.

alpha
종류:부동 소수점
기본값:1.0

디스플레이어블의 불투명도를 제어한다.

알파 트랜스폼은 트랜스폼의 하위 디스플레이어블을 구성하는 이미지에 각각 적용된다. 하위 디스플레이어블이 포개지면 의상 이미지 뒤에 있는 캐릭터 이미지가 보이는 등 원치 않은 결과가 발생할 수 있다. Flatten() 디스플레이어블을 이용하면 이런 문제를 해결할 수 있다.

additive
종류:부동 소수점
기본값:0.0

렌파이가 가산 혼합을 어느 정도 실행하는지를 제어한다. 1.0이면 렌파이는 ADD 연산자를 사용해 화면을 그린다. 0.0이면 OVER 연산자를 사용한다.

가산 혼합은 트랜스폼의 하위 디스플레이어블에 각각 적용된다.

완전히 가산 혼합했더라도 대상의 투명도 채널을 가산 혼합이 대체하지는 않으며 가산된 이미지는 불투명한 영역에 직접 그려지지 않았다면 보이지 않을 수도 있다. (뷰포트, Flatten(), Frame(), 또는 특정한 트랜지션처럼 복잡한 연산은 가산 혼합을 함께 사용하는 경우 문제가 발생할 수 있다.)

경고

가산 혼합은 OpenGL 과 DirectX/ANGLE 렌더러 같은 하드웨어 기반 렌더러만 지원합니다. 소프트웨어 렌더러는 가산된 이미지를 비정상적으로 그립니다.

그래픽 시스템이 구동되면 가산 혼합이 지원되는 경우에 renpy.get_renderer_info()["additive"] 가 참값이 됩니다.

around
종류:(위치, 위치)
기본값:(0.0, 0.0)

None이 아닌 경우, 포함 영역의 좌측 상단 모서리를 원점으로 삼아 극좌표 중심을 지정한다. 이것으로 중심을 설정하면 위치 값으로 원형 움직임을 사용할 수 있다.

alignaround
종류:(위치, 위치)
기본값:(0.0, 0.0)

None이 아닌 경우, 포함 영역의 좌측 상단 모서리를 원점으로 삼아 극좌표 중심을 지정한다. 이것으로 중심을 설정하면 align 값으로 원형 움직임을 사용할 수 있다.

angle
종류:부동소수점

극좌표 중심의 각도 요소 값을 얻는다. 극좌표 중심이 설정되지 않았다면 정의되지 않는다.

radius
종류:위치

극좌표 중심의 반경 요소 값을 얻는다. 극좌표 중심이 설정되지 않았다면 정의되지 않는다.

crop
종류:None 또는 (정수, 정수, 정수, 정수) 또는 (부동소수점, 부동소수점, 부동소수점, 부동소수점)
기본값:None

None이 아니면, 주어진 값대로 디스플레이어블을 사각형으로 잘라낸다. (x, y, 가로 길이, 세로 길이) 튜플로 사각형을 정의할 수 있다. 부동소수점 값을 입력하고 crop_relative가 참이라면 각 요소들은 잘라낼 이미지의 가로 및 세로 길이의 비율로 해석한다. 그 외에 튜플의 각 요소는 픽셀 수로 간주된다.

crop_relative
Type:boolean
Default:False

True면, crop에 입력된 부동 소수점은 잘라낼 이미지의 가로 및 세로 길이의 비율로 해석된다.

corner1
종류:None 또는 (정수, 정수)
기본값:None

None이 아니면, 자르려는 범위의 좌측 상단 값을 지정한다. crop보다 우선순위가 높다.

corner2
종류:None 또는 (정수, 정수)
기본값:None

None이 아니면, 자르려는 범위의 우측 하단 값을 지정한다. crop보다 우선순위가 높다.

size
종류:None 또는 (정수, 정수)
기본값:None

None이 아니면, 디스플레이어블을 주어진 사이즈만큼 크기를 변경한다.

subpixel
종류:True/False
기본값:False

True면, 서브픽셀 포지셔닝을 사용해 디스플레이어블을 화면에 표시한다.

delay
종류:부동 소수점
기본값:0.0

transform이 트랜지션으로 사용되고 있다면, 트랜지션을 진행할 기간이 된다.

events
Type:True/False
Default:True

참값이면 이벤트는 이 트랜스폼의 하위 디스플레이어블에 전달된다. 거짓값이면 이벤트는 막힌다. (이벤트가 old_widget에 접근하는 것을 방지할 때 사용할 수 있다.)

이 속성들은 다음과 같은 순서로 적용됩니다:

  1. crop, corner1, corner2
  2. size
  3. zoom, xzoom, yzoom
  4. rotate
  5. 위치 속성들

원형 움직임

보간문이 clockwisecounterclockwise 키워드를 포함하면, 보간은 원형 움직임을 발생시킵니다. 렌파이는 시작 위치와 종료 위치를 비교하여 극좌표 중심을 계산해냅니다. 그 뒤에 특정된 회전의 방향에서 시작 각에서 종료 각까지의 각도를 계산할 것입니다. circles 절이 있다면 렌파이는 주어진 수만큼의 원형을 그리도록 할 것입니다.

그 후 렌파이는 원형 움직임을 발생시키기 위해 각도와 반경 속성을 적절히 보간할 것입니다. transform이 align모드인 경우에 angle과 radius를 설정하면 align 속성도 설정될 것입니다. 그 외에는 pos 속성이 설정됩니다.

외부 이벤트

아래의 이벤트들은 자동으로 작동합니다:

start
모조 이벤트, 더 높은 순위의 이벤트가 발생하지 않았을 때 on 문을 만나면 작동됩니다.
show
show나 scene 문을 사용했을 때 트랜스폼이 나타나며, 지정한 태그를 가진 이미지가 존재하지 않으면 작동됩니다.
replace
show문을 사용했을 때 트랜스폼이 나타나며 지정한 태그를 가진 이미지로 대체되면 작동됩니다.
hide

hide 명령문이나 그에 상응하는 파이썬 함수로 트랜스폼이 숨겨졌을 때 작동됩니다.

이 이벤트는 트랜스폼이 scene 명령문으로 제거되거나, 게임 메뉴에서 나가는 것처럼 현존하는 상황에서 나가는 때에는 작동하지 않습니다.

replaced
트랜스폼이 다른 것에 의해 대체되면 작동됩니다. 이미지는 ATL 블럭이 끝날 때까지 숨겨진 것이 아닙니다.
update
스크린이 나타나거나 다른 스크린으로 교체되는 방식이 아닌 다른 식으로 업데이트 되었을 때 발생하는 이벤트. 스타일이나 번역문이 변경되었을 때, 게임을 불러왔을 때 등 간혹 이런 이벤트가 발생할 수 있습니다.
hover, idle, selected_hover, selected_idle
버튼이 트랜스폼을 포함하거나 트랜스폼이 버튼을 포함하면 작동하며, 지정된 상태에 진입합니다.