사이드 이미지
많은 비주얼 노벨은 인터페이스의 일부로 말하는 캐릭터의 그림을 표시합니다. Ren'Py에서는 이를 사이드 이미지라고 부르며, 대사의 일부로 사이드 이미지를 자동 선택하고 표시하는 기능을 제공합니다.
사이드 이미지 기능은 Character()를 선언할 때 이미지 태그를 연결했다고 가정합니다.
define e = Character("에일린", image="eileen")
캐릭터가 말하면 Ren'Py가 표시할 사이드 이미지를 찾습니다. 이미지에는 다음이 있어야 합니다.
"side" 태그.
말하는 캐릭터에 연결된 이미지 태그에 해당하는 속성. 이 예에서는 "eileen"입니다.
말하는 캐릭터의 이미지 태그에 현재 연결된 속성 중 가능한 한 많은 속성.
Ren'Py는 이 조건에 맞는 이미지를 하나로 결정하려고 합니다. 하나를 찾으면 사이드 이미지로 사용합니다. 없거나 둘 이상이면 표시하지 않습니다.
예를 들어 다음 스크립트가 있다고 가정하겠습니다.
define e = Character("에일린", image="eileen")
image eileen happy = "eileen_happy.png"
image eileen concerned = "eileen_concerned.png"
image eileen space suit = "eileen_space_suit.png"
image side eileen happy = "side_eileen_happy.png"
image side eileen = "side_eileen.png"
image side eileen space = "side_eileen_space.png"
image side eileen suit = "side_eileen_suit.png"
label start:
show eileen happy
e "이 대사를 지점 A라고 할게요."
e concerned "그리고 이 대사는 지점 B예요."
e space suit "이 대사는 지점 C예요."
A 지점에서는 이미지 태그 "eileen"에 연결된 캐릭터 e가 말합니다. "eileen happy" 이미지가 표시 중이므로 "eileen"은 필수이며 "happy"도 포함할 수 있습니다. "side" 태그와 해당 속성을 최대한 많이 가진 이미지를 찾으면 "side eileen happy"가 일치하므로 Ren'Py가 이를 표시합니다.
B 지점에서는 "eileen concerned" 이미지가 표시 중입니다. "eileen"은 필수이며 "concerned"도 포함할 수 있습니다. "side" 태그와 해당 속성을 최대한 많이 가진 이미지를 찾지만 "side eileen concerned"는 없으므로 "side eileen"이 일치합니다.
C 지점에서는 "eileen space suit" 이미지가 표시 중입니다. "eileen"은 필수이며 "space"와 "suit"도 포함할 수 있습니다. 조건에 맞는 이미지는 "side eileen space"와 "side eileen suit"입니다. 두 이미지의 속성 수가 같으므로 Ren'Py는 어느 쪽도 선택하지 않고 사이드 이미지를 표시하지 않습니다.
화면에 없는 캐릭터
사이드 이미지는 플레이어 캐릭터가 말할 때 그 캐릭터의 이미지를 표시하는 데도 사용할 수 있습니다. 캐릭터에 이미지를 연결하고 이미지 속성을 사용하는 say 구문으로 표시할 사이드 이미지를 선택합니다.
예를 들면 다음과 같습니다.
define p = Character("플레이어", image="player")
image side player happy = "side_player_happy.png"
image side player concerned = "side_player_concerned.png"
label start:
p happy "이 대사는 'side player happy' 이미지와 함께 표시됩니다."
p "이 대사도 'side player happy' 이미지와 함께 표시됩니다."
p concerned "이 대사는 'side player concerned' 이미지와 함께 표시됩니다."
설정 변수와 스토어 변수
설정 변수로 사이드 이미지의 여러 특성을 제어할 수 있습니다.
- _side_image_tag = None
- define config.side_image_tag = None
_side_image_tag가 None이 아니면 config.side_image_tag보다 우선합니다.
지정하면 현재 말하는 캐릭터에 연결된 이미지 대신 지정한 이미지 태그를 사이드 이미지가 따라갑니다. 예를 들어:
define e = Character("에일린", image="eileen") define config.side_image_tag = "eileen"
e캐릭터에 연결된 "eileen" 이미지 태그를 따라가도록 합니다.
- define config.side_image_only_not_showing = False
참이면 같은 태그의 이미지가 화면에 이미 표시되어 있지 않을 때만 사이드 이미지를 표시합니다.
- _side_image_prefix_tag = None
- define config.side_image_prefix_tag = 'side'
_side_image_prefix_tag가 None이 아니면 config.side_image_prefix_tag보다 우선합니다.
사이드 이미지를 찾을 때 사용하는 접두사입니다.
- define config.side_image_null = Null()
사이드 이미지를 표시하지 않을 때 사용할 Null 디스플레이어블입니다. 바꿀 수 있지만 다른 Null 객체만 사용할 수 있습니다. 예를 들어
Null(width=200, height=150)처럼 크기를 설정하여 디졸브가 잘리는 것을 방지할 수 있습니다.
- define config.side_image_same_transform = None
None이 아니면 새 사이드 이미지가 이전 사이드 이미지와 같은 이미지 태그를 공유할 때 사용할 트랜스폼입니다.
- define config.side_image_change_transform = None
None이 아니면 새 사이드 이미지가 이전 이미지와 같은 태그를 공유하지 않거나 둘 중 하나가 없을 때 사용할 트랜스폼입니다.
트랜스폼과 화면 전환
사이드 이미지를 표시할 때마다 config.side_image_same_transform과 config.side_image_change_transform 트랜스폼을 이전 및 새 사이드 이미지 디스플레이어블이라는 두 인수로 호출합니다. 사이드 이미지를 움직이거나 두 이미지 사이에 화면 전환을 적용할 수 있습니다.
다음 코드는 연결된 캐릭터가 바뀌면 사이드 이미지가 밀려 들어오고 나가도록 합니다.
transform change_transform(old, new):
contains:
old
yalign 1.0
xpos 0.0 xanchor 0.0
linear 0.2 xanchor 1.0
contains:
new
yalign 1.0
xpos 0.0 xanchor 1.0
linear 0.2 xanchor 0.0
define config.side_image_change_transform = change_transform
다음 코드는 캐릭터가 같을 때, 예를 들어 감정이 바뀔 때 이전 사이드 이미지와 새 사이드 이미지 사이에 디졸브를 적용합니다. Dissolve가 올바르게 동작하려면 두 이미지의 크기가 같아야 합니다.
transform same_transform(old, new):
old
new with Dissolve(0.2, alpha=True)
define config.side_image_same_transform = same_transform
SideImage()를 축소한다면 Dissolve()에서 밉매핑을 켜는 것이 좋을 수 있습니다.
transform same_transform(old, new):
old
new with Dissolve(0.2, alpha=True, mipmap=True)
define config.side_image_same_transform = same_transform
함수
- renpy.get_side_image(prefix_tag, image_tag=None, not_showing=None, layer=None)
사이드 이미지로 표시할 이미지를 찾으려고 합니다.
먼저 이미지 속성 집합을 결정합니다. image_tag를 지정하면 해당 태그에서 속성을 가져옵니다. 아니면 현재 캐릭터에 지정한 image 속성에서 가져옵니다. 사용할 속성이 없으면 None을 반환합니다.
이어서 prefix_tag 태그와 다음 속성을 가진 이미지를 찾습니다.
이미지 태그. image_tag 또는 현재 캐릭터에 지정한 image 속성에서 가져옵니다.
이미지 속성들.
해당 이미지가 있으면 반환합니다.
- not_showing
True이면 속성을 가져온 태그의 이미지가 현재 표시 중이지 않을 때만 사이드 이미지를 반환합니다. False이면 가능한 한 항상 이미지를 반환합니다. None이면
config.side_image_only_not_showing값을 사용합니다.- layer
지정하면 이미지 태그와 속성을 찾을 레이어입니다. None이면 태그의 기본 레이어를 사용합니다.
- renpy.set_tag_attributes(name, layer=None)
이미지 태그가 표시 중이지 않을 때 해당 태그에 연결된 속성을 설정합니다. 주로 사이드 이미지에 사용할 속성을 직접 설정하는 데 사용합니다.
예를 들어:
$ renpy.set_tag_attributes("lucy mad") $ renpy.say(l, "나 꽤 화났어.")
다음은:
l mad "나 꽤 화났어."
서로 같습니다.