Ren'Py
编辑script.rpy
# 游戏在此开始。
label start:
"你开始了游戏"
角色和图像
无角色的对话:用""
括起来就行了。
有角色对话,用define e = Character("艾琳")
定义角色,角色 "对话"
来表示。
三引号可以创建多条对话,换条需要双换行。
文本内插变量
"文本内插变量:[playername]"
标签使用{}
引导
"{color=#f00}红色{/color}"
"{cps=20}固定速度{/cps} {cps=*2}两倍速{/cps}
"中断并换行{p}中断不换行{w}直接显示{fast}不停顿直接下一句{nw}"
笔记:{nw}
好像可以和{fast}
配合,或者和pause
,extend ""
也很妙,可以显示些意想不到的效果。
size
大小 color
颜色 font
字体 alpha
透明度 b
粗体 i
斜体 a
超链接
角色用Character()
类定义。用what_
和who_
区分对对话文本和角色名进行操作。 size
文本大小 color
颜色 outlines
外边框 [(宽度, 颜色, x偏移, z偏移)]
font
字体 prefix
前缀 suffix
后缀 image
图像 window_background
背景框 bold
粗体
image
是给人物加图像标签,例如image=eileen
时,游戏会把eileen *
形式的所有图片关联起来。
图片名称应该是eileen happy.png
之类,eileen
为标签,后面的都称为图像属性。
show eileen happy
e "很高兴认识你。"
# 相当于
e happy "很高兴认识你。"
可以直接读图像,也可以定义图像
image eileen normal = "images/charater/eileen1.png"
图像显示分为scene和show,scene会清除当前页面的所有图像,然后显示该图像。
显示图像时,可以用at
后跟变换。hide
后不接变换。
show pic at left # 左边显示图片
show pic at right # 跑到右边
show pic at left as pic2 # 图片分身!
图像的转场可以使用with
,常用的标准函数有dissolve
和fade
。隐藏图像通常用hide
。
scene bg
with fade
"fade"
show pic at left
with dissolve
"dissolve"
hide pic
with dissolve
"hide"
其他转场可以用遮罩ImageDissolve
和AlphaDissolve
。
ATL是动画和变换语言。
定义变换:
transform centerleft:
xalign 0.1
yalign 0.5
使用时可以在at
后使用。
图像的基础语法:
anchor
锚点坐标 pos
坐标 offset
偏离 align
将pos
和anchor
设置为相同的值(方便把图图片在游戏中整体布局) zoom
放大倍数 alpha
透明度 rotate
角度
注意0.0
和0
不一样,整数认为是像素,小数认为是屏幕大小。
定义样式:
style drop_shadow_1:
size 40
outlines [ (0, "#101010", 2, 2) ]
image test_text_1 = Text("测试文本", style="drop_shadow_1")
音频
音频文件可以新建一个music
目录,方便管理。
声音播放有三种music
循环播放,sound
播放一次,voice
播放一次并且点击就会停止。可以用stop
来立即停止音乐。
define music1 = "music/music1.mp3"
play music music1 fadein
play sound sound1
voice voice1
stop music fadeout
play music [music1, music2]
queue music [music1, music2] loop
<>
内加量用于控制播放时间,另有函数获取播放时间。
跳转
menu
语句能够给玩家一个分支选项,jump
call
和label
用于跳转。
define x = 0
menu:
"选择你的角色"
"Choice 1":
$ x = 1
"Choice 2":
python:
x = 2
"你好"
if x == 1:
"你选择了1"
else:
"你选择了2"
在ren’py里使用python时(一般只有赋值语句需要),可以使用$
作为单行代码,python:
引导多行代码。
opyions.rpy
下都是设置。
文字显示速度,preferences.text_cps
,每秒显示的字符数。
图层,内部定义了四个图层,master
是在scene
,show
,hide
中默认使用的图层。
笔记:这样的话,with dis
就不会动对话框了。
define dis = { "master" : Dissolve(1.0) }
图片可以用contains
来包含多个部分。
image purecolor:
contains:
"#000"
topleft
size(640, 360)
contains:
topright
"#fff"
size(640, 360)
图像变换
show pic
xalign 0.0
yalign 0.0
time 1.0
parallel:
ease 3 xalign 1.0
parallel:
easein 3 yalign 1.0
变换函数:linear
线性ease
慢快慢easein
快慢easeout
慢快pasue
暂停跳转。
parallel
会同时实现,choice
是随机选择一个。
vscode插件,按tab就会显示所有函数。例如tabtransistions
就会得到
1
2
3
4
5
6
7
8
9
fade, dissolve, pixellate, move,
moveinright (Also: moveinleft, moveintop,moveinbottom),
moveoutright (Also: moveoutleft, moveouttop,moveoutbottom),
ease (Also: easeinright, easeinleft, easeintop,easeinbottom, easeoutright, easeoutleft,easeouttop, easeoutbottom),
zoomin, zoomout, zoominout, vpunch, hpunch,blinds, squares,
wipeleft (Also: wiperight, wipeup, wipedown),
slideleft (Also: slideright, slideup,slidedown),
slideawayleft (Also: slideawayright,slideawayup, slideawaydown),
irisin, irisout.
这些都是转场特效。
高级转场可以用ImageDissolve(image, time, ramplen, )
。
clockwise = ImageDissolve("")
label before_main_menu:
scene purecolor with dissolve
pause
function
语句允许ATL使用Python函数控制ATL特性(property)。
第一个入参是一个transform对象。transform特性可以通过该对象进行设定。 第二个入参是显示时间轴,表示函数开始执行到现在经过的秒数。 第三个入参是动画时间轴,表示具有相同标签(tag)的某物在整个界面上已存在的秒数。 如果函数返回一个数值,其会在数值对应的时间(秒)后再次被调用。(0秒表示尽可能快地调用该函数。)如果函数返回空值(None),主控流程会跳到下一个ATL语句。 除了修改第一个入参中的Transform对象之外,该函数不应该包含其他作用。 在可以在任意时间传入任意值,以启用预加载。
init python:
def slide_function(trans, st, at):
if st > 1.0:
trans.xalign = 1.0
return None
else:
trans.xalign = st
return 0
label start:
show logo base:
function slide_function
pause 1.0
repeat