renpy (1) 基礎語句
Contents
緣起
其實很多內容在 雪凡與好朋友們的 Ren’Py 遊戲引擎初學心得提示 就有了,大概寫一些製作時的心得而已。
搭配renpy官網服用,妙不可言。
檔案目錄
初學要知道的在renpy中有三個區段。我稱之為init區段,label區段以及python區段。這三個區段的語法都略有不同。
而撰寫語法的檔案,只要在game目錄下新增.rpy檔即可,不管命名為何,renpy會預設載入game目錄下所有的.rpy檔作為renpy的語法輸入。
接下來就分別說明三個區段的差異之處。
init區段
新增一個.rpy檔,若無明確指定為label或python區段,那就可以視為init區段了。
init區段通常做為定義變數、圖片、screen之用,會在遊戲啟動的瞬間先行載入。
init區段可以透過下列語法來新增
init -1:
define abc = character("abc")
image def = "def"
init旁邊接的數字的意義為載入順序(若沒寫則為0),比如說,若有三個init區段
init 1:
image a = "a"
init 2:
image b = "b"
init 3:
image c = "c"
雖然撰寫順序為由上往下,但由於數字大的先載入,所以renpy會先讀取image c,接下來是b,最後才為a。 如果有載入順序的要求的話(雖然我還沒遇過),可以嘗試看看這招。
label區段
此處為遊戲運行之腳本,對於玩過avg遊戲的人應該很熟悉,就是讓你可以點一點繼續向下看對話的地方。
可以運用show , call, with dissolve之類的語句來展現對話效果。
這裡列出兩個極為重要的保留(reserved) label
label start:
a "Are u ok"
b "I'm fine."
label splashscreen:
"hello moto"
現在市面上遊戲開始的流程大致如下
(開啟遊戲) 遊戲廠商logo(或片頭動畫) => 遊戲主選單 => 進入遊戲主題
label start為預設的遊戲主題進入點,當你使用Start()這個函式時即會自動跳轉到start label所在的位置。
label splashscreen則可以作為遊戲廠商logo或片頭動畫之用,是進入遊戲主選單前要執行之語句。
其他重要的label可參照官網
另外,若無指定main_menu此label,則screen main_menu是預設的遊戲主選單畫面。
python區段
在撰寫renpy的時候應該多數人都會覺得自己是在寫renpy而非寫python,雖然語法相似,很多地方還是有不同XD
另外,renpy語法雖然已經夠強大,但有些時候還是得靠python才能做到一些renpy不支援的特效。於是renpy也支援在renpy中插入python語法。
最基本的插入法可看下列程式碼
$ x = "abc"
$ y = "def"
python:
x = "abc"
y = "def"
這兩種寫法都是同義的,如果你只想寫一行python,可以考慮使用 $ 符號,如果你想一次撰寫多行(例如function)可以用python:的方式來撰寫。
在label區段中,插入python code應該沒任何問題,不過在init區段的screen language當中,插入python的位置就要小心。
screen test:
python:
def func():
pass
frame:
textbutton "abc":
action Function(func)
screen test:
frame:
python:
def func():
pass
textbutton "abc":
action Function(func)
這兩個寫法只是將python code稍微移動一下而已,但是下面那個版本在renpy 6.98的版本會找不到func。可能跟renpy的載入順序有關。
所以我個人是建議使用若要在screen中使用python,最好在使用前的上一層結構就先行定義。
但,如果是使用 $ 符號,好像就沒有這個問題。
python區段也可以為init,在最初的時候就先行載入,而非等到程式執行到了才動態載入。語法如下
init 2 python:
x = "abc"
同樣的init後面的數字為載入之優先權,若無指定則為0。