跳到主要內容

登場退場 / 切換角色

作者: 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