跳到主要内容

制作选像分支

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


Renpy 自制游戏教学#02 【选像分支制作】

选像分支就是像这样的东西: image alt

让玩家有至少2个选择可以做出,你也可以加上一些变量(variable)让玩家的选择影响后面的剧情或是增加好感度

前期准备

在开始之前先让我们有2个可以对话的角色吧

define a=Character("路人A")
define b=Character("路人B")

另外我们也可以在放一个背景在后面

  • image park = "images/bg/park.jpg"

除了角色以外在让我们设置一些变量(variable)

关于什么是变量可以参考下列文章:
$cha_aff = 0
$chb_aff = 0
default apple = False
default banana = False
✨✨

存放数字之类的变量可以使用 $
放文字的话使用 define 或是 default
但是使用default我认为会比较好因为使用 define 很容易在存档/读档时出问题

建立第一个分支

建立分支 renpy 所使用的代码是 menu
写法是这样:

menu:
"选像1":

"选像2":
  • Menu 后面要加 :
  • 记得在每个选项后面要加 :
  • 每个选项显示的字要用2个引号 "" 包住
  • 在每个选像的 : 后一句可以写上选了某个选项后要执行的动作

选择后显示文字

你可以直接在每个选项的 :后一句打上对话
像这样:

menu:
"苹果":
"苹果好吃"
"香蕉":
"香蕉好吃"
  • "苹果好吃" 这句话这样就会显示在玩家选了🍎苹果之后
  • "香蕉好吃" 这句话这样就会显示在玩家选了🍌香蕉之后

如果你要指定某个角色说出 "苹果好吃" 或是 "香蕉好吃" 的话,只要在句子前面加上角色的代号就可以啰
范例:

menu:
"苹果":
a "苹果好吃"
"香蕉":
b "香蕉好吃"

选择后增加好感

这个时候就可以用到刚刚定义的 $cha_aff = 0$chab_aff = 0
使用范例:

menu:
"苹果":
a "苹果好吃"
$cha_aff += 1
"香蕉":
b "香蕉好吃"
$chb_aff += 1

确认好感度确实增加了

一个简单的方式去确认好感有没有增加你可以像我这么做
首先创建一个新的 label, label名字的话可以随便取
范例:

label stats:
"路人A的好感度是 [cha_aff]"
"路人B的好感度是 [chb_aff]"
  • [] 里面的字 = 你的变量 (variable) , 里面的字必须和你之前定义的名字一样窝

所以你的代码可以大概长这样:

menu:
"苹果":
a "苹果好吃"
$cha_aff += 1
jump stats
"香蕉":
b "香蕉好吃"
$chb_aff += 1
jump stats

label stats:
"路人A的好感度是 [cha_aff]"
"路人B的好感度是 [chb_aff]"

根据好感跳转剧情

或许你想要根据你的好感 (像是可能好感过 10 时) 跳到特殊的剧情 这时你就要使用到 if 语句 和 jump
所以它的代码可以看起来像这样

if cha_aff >= chb_aff:
jump next1
else:
jump next2
  • 这2句的意思是- 当cha_aff的数值(好感)大于chb_aff时 , 跳到 next1
  • 如果ha_aff的数值(好感)小于chb_aff时则跳到 next2

所以代码可以大概长这样:

menu:
"苹果":
a "苹果好吃"
$cha_aff += 1
"香蕉":
b "香蕉好吃"
$chb_aff += 1

if cha_aff >= chb_aff:
jump next1
else:
jump next2

label next1:
"苹果超赞, 路人A超喜欢你!"
jump start
label next2:
"香蕉超赞, 路人B超喜欢你!"

根据事件跳转剧情

除了根据好感以外你也能根据角色经历过的事件跳转剧情
这个时候就可以用到刚刚定义的这两句 - $end1= false$end2 = false
所以你的代码可以看起来像这样:

menu:
"苹果":
a "苹果好吃"
$apple = True
"香蕉":
b "香蕉好吃"
$banana = True

if apple == True:
jump appleTrue
elif banana == True:
jump bananaTrue
else:
jump start
  • 使用这个的话你还要在建立另外2个label - appleTruebananaTrue

除了直接跳转到另一个 Label 外也可以直接把要额外写的句子加在 if statement 的后面
像是这样:

menu:
"苹果":
a "苹果好吃"
$apple = True
"香蕉":
b "香蕉好吃"
$banana = True

if apple == True:
"恩恩苹果真的超赞"
elif banana == True:
"恩恩香蕉真的超赞"
else:
"欸欸怎么会出现这句话呢?"

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

请我喝杯咖啡

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


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