跳到主要内容

登场退场 / 切换角色

作者: NingNing
创建日期: 2022-07-28
最后更新: 2022-12-06


让没讲话的角色变暗

这次的教学是关于在 Renpy 里面切换角色或是让某个角色变成类似待机的状态
反正就是在他不说话时变得比较黑这样
这样就可以让发言中的角色看起来更明显拉

这篇我也在我原本的Blog - Space of NingNing 已经写过拉
这是根据那个文章做出来的样子 - 预览
所以你也可以参考这篇文章

前期准备

你要准备的就是 2 张图片一张是原本普通的图片还有另一张是当他不说话但是还在场上时的样子

准备图片

范例:
普通的样子
Image1
不说话时
Image2

因为这次我会让 2 个人对话 然后每个人 2 个 表情 --> 总共使用 6 张图窝

  • 4 张普通的状态
  • 2 张黑掉 / 没有在说话时的状态

定义角色

接下来你需要有 2 个 用来对话的角色
在这个范例 / 教学文章里 我会建立 1 个叫做 Lia 和 一个叫做 Mika 的 角色

你可以定义角色们在 script.rpy 里或是新建的 .rpy 档案

tip

只要把 .rpy 档案放在 game 资料夹里 Renpy 都找的到窝

define m = Character('Mika', color="#000000")
define l = Character('Lia', color="#9e3bad")

ConditionSwitch 语句

写法:

image 图片代码 =ConditionSwitch("_last_say_who == '角色X代码'","图片路径",
"not _last_say_who == '角色X代码'", "图片路径")

如果假设要使用 4 个图片 (举例: 一个角色配上4种表情) 那像上面那样的代码就要打 4 遍窝
范例:

image lia =ConditionSwitch("_last_say_who == 'l'","images/character/lia.png",
"not _last_say_who == 'l'", "images/character/lia dark.png")
image mika =ConditionSwitch("_last_say_who == 'm'","images/character/mika.png",
"not _last_say_who == 'm'", "images/character/mika dark.png")

因为每个角色都有 2 个表情 (说话 / talking) 所以我还会再加上 2 句

image lia talking =ConditionSwitch("_last_say_who == 'l'","images/character/lia.png",
"not _last_say_who == 'l'", "images/character/lia dark.png")
image mika talking =ConditionSwitch("_last_say_who == 'm'","images/character/mika.png",
"not _last_say_who == 'm'", "images/character/mika dark.png")

这样图片都定义好啦

接下来我们就是实际使用的环节拉

正式使用时间~

使用其实跟普通的图片一样 所以这里你同样可以使用 show image

那就让我们在 label start 后面打上

show lia
tip

show lia 是我们刚刚在定义图片时定义过的图窝

然后在加上一些对话
范例剧情:

show lia at topleft
l"安安"
show mika at topright
m "你好"
show lia talking
l "早安"
show mika talking
m "早安"

之后呈现出来的画面可以透过文章尾处的影片连结查看窝

接下来是让角色登场时跳一下的特效
使用这个特效也能够让玩家清楚的知道现在换角色讲话


建立登场特效

你可以把下面的代码加在 script.rpy 里面
我的话通常是会为特效们自己建立一个 .rpy 拉
-------- 分隔线 --------

创建新的 transform

首先你要让 Renpy 知道你正在建立一个特效,所以先打上 transform
然后,后面在接上你想取的名字
范例:

transform talk:
  • 不要忘记 : 要在名字后面窝

接下来就是对应的代码拉
你可以直接复制贴上下面的代码 (复制到transform talk: 下面):

      yoffset 0
easein 0.25 yoffset -50
easeout 0.20 yoffset 0
easein 0.15 yoffset -20
easeout 0.15 yoffset 0
  • yoffset = 角色立绘直向的位置

  • easein = 特效缓缓进入的速度

  • easeout = 特效缓缓结束的速度

  • 后面的数字都是可以自行更改的窝

  • 目前的代码呈现的感觉就是 角色缓缓上升 (到 yoffset -50 的位置) 然后在缓缓地回到原点

之后的:

      easein 0.15 yoffset -20
easeout 0.15 yoffset 0
  • 这主要是呈现出像是夹娃娃机那样 最后特效结束时跳一下的那种感觉
  • 我不太会形容www 你可以预览效果 --> 滑到最下面的影片

如果你不想让特效马上跑出来 / 想要一些缓冲时间的话也可以加上 pause 在最前面

    pause 0.10
  • 像上面这样就是一个 0.1s 的缓冲时间

使用 transform

按照上面的步骤我想你已经创建好了 你的 transform
接下来我们要回到 script.rpy

下面的是,如果你跟着上面的步骤一起走的话目前会有的代码 (范例):

# 2个登场的角色
define m = Character('Mika', color="#000000")
define l = Character('Lia', color="#9e3bad")

# 定义好的图片
image lia =ConditionSwitch("_last_say_who == 'l'","images/character/lia.png",
"not _last_say_who == 'l'", "images/character/lia dark.png")
image mika =ConditionSwitch("_last_say_who == 'm'","images/character/mika.png",
"not _last_say_who == 'm'", "images/character/mika dark.png")
image lia talking =ConditionSwitch("_last_say_who == 'l'","images/character/lia talking.png",
"not _last_say_who == 'l'", "images/character/lia dark.png")
image mika talking =ConditionSwitch("_last_say_who == 'm'","images/character/mika talking.png",
"not _last_say_who == 'm'", "images/character/mika dark.png")

# 刚刚定义的特效
transform talk:
yoffset 0
easein 0.25 yoffset -50
easeout 0.20 yoffset 0
easein 0.15 yoffset -20
easeout 0.15 yoffset 0

# 游戏从这里开始
label start:
show lia at topleft
l"安安"
show mika at topright
m "你好"
show lia talking
l "早安"
show mika talking
m "早安"

要使用刚刚定义好的 transform talk 的话只要在 show image 后面加上 at talk 就好啦
范例:

show lia talking at talk
  • at 后面要加上你自己定义的 transform 的名字

多个角色一次登场/退场

这段有影片教学窝!
Renpy 自制游戏教学#06

如果你的游戏中总是会让几个固定的角色登场/退场的话,你就有可能会想知道这个功能 (可以节省一直重复写一样的代码的时间)

  • 让多个人物立绘同时出现 / 消失

首先你需要创建2个 label (名字叫什么都可以)

建立进场 label

第一个是把角色们叫出来的 label

范例:

label showPeople:

然后第二步是让立绘出现在画面中 并指定出现的位置

范例:

    show cha1 at left
show cha2 at right

然后是加上返回 return 因为之后要使用 call --> 关于 call 语句你可以看这篇

所以第一个 label 看起来会是这样:

label showPeople:
show cha1 at left
show cha2 at right
return
  • cha1cha2 是图片的代码
  • 或是在 .png 前面的字 (在没有事前定义图片的情况下 Renpy 会自动侦测图片名字)
  • 如果要在登场时加上特效的话可以直接在 show cha1 at leftshow cha2 at right 后面加上

建立退场 label

接下来是建立为了呈现出退场的 label
label 的名字取什么都可以窝

范例:

label hidePeople:

第二步是写出让立绘消失的代码 --> 让角色退场我们使用 hide

范例:

    hide cha1
hide cha2

最后是加上返回 return

所以退场的 label 看起来会是这样:

label hidePeople:
hide cha1
hide cha2
return
  • 如果要在退场时加上特效的话可以直接在 hide cha1hide cha2 后面加上

实际使用看看吧!

下面是一个实际使用的范例:

label start:
scene park
"现在没有人登场~"
"还是没人登场~"
call showPeople
cha "我跟路人2一起登场拉"
chb "我同时出现拉"
call hidePeople
"大家都消失了窝"
  • 当要让角色一次登场时使用 call showPeople
  • 当要让角色一次退场时使用 call hidePeople

今天这篇的教学就结束拉~

请我喝杯咖啡

请我喝杯咖啡: Ko-Fi | PayPal
进入我的官网: Space Of NingNing
订阅我的YT (不定时会有教学影片) : NingNing
订阅 Newsletter: 点击传送门


联络我 / 传讯息给我
透过 Twitter 联络我: @wSmileFlowerw
透过 Email 联络我 : youolikeojazz@gmail.com