You've reached a page on the Ren'Py wiki. Due to massive spam, the wiki hasn't been updated in over 5 years, and much of the information here is very out of date. We've kept it because some of it is of historic interest, but all the information relevant to modern versions of Ren'Py has been moved elsewhere.
Some places to look are:
Please do not create new links to this page.
显示体是一个python对象,作用是在屏幕上生成一个显示的界面。 可以用image语句来指定一个图像名为显示体,然后可以在show和hide语句中使用。 还可以做为参数提供给函数。 它们也可以作为某些样式属性的参数。 在这一节,我们要讲述创建显示体的函数。
当Ren'Py需要为一个显示体指定颜色时,可以有以下几种方式。 在下面的例子中,小写字母代表十六进制数,而大写字母则是0~255的简易格式。R, G, B和A是红(red),绿(green),蓝(blue)及Alpha的简写。
(R, G, B, A)形式的四元组。 (黄 = (255, 255, 0, 255), 蓝 = (0, 0, 255, 255))
当Ren'Py需要指定一个显示体时,可以有下面几种形式:
图像是一种含有位图信息,能在屏幕上显示的显示体。 所有的图像都是显示体,但不是所有的显示体都是图像。 图像和其它显示体的区别在于,它能够静态运算,同时能储存在图像缓存(image cache)中。 图像在即将被使用前会读入缓存。(不过在创建图像时则不会) 这能让图像的读取快于其它的显示体。 图像操作器是一个返回图像的函数。
图像操作器需要一个图像作为输入,然后可以有多种输出的方式。
游程编码(Run-length Encoding) Ren'Py支持游程编码,这样可以有效地用大量的透明度来描绘图像。 所有的图像操作器都支持 rle参数。 取值为True,将使用游程编码。 为False时则不使用。 为空时(缺省方式),Ren'Py会在随机图像中随机采样10个点,以探测能否找到透明度,如果找到就使用RLE。当一个图像大部分都是透明时,描绘速度会大大提升。 (5.6.2.中已增加了RLE)
init:
image eileen happy = Image("eileen_happy.png", rle=True)
Image Manipulator列表 下列都是图像操作器:
有两种显示体非常适合用作背景:
能将文本当作显示体显示。
Ren'Py也支持参量化的文本对象,也就是将文本作为图像显示。 不过要谨慎使用,因为更好的方法是使用对像来显文本。 在缺省方式下,声明有一个叫“name”的图像,不过用户可以声明多个,并可同时显示在屏幕上。
在游戏中使用可以改变显示体的样式。
Ren'Py提供了好几种动画显示体。
这些动画函数使用了一个anim_timebase参量,用来决定使用何种时基(timebase)。 当anim_timebase为True时将使用动画时基(animation timebase),它是从含有图像标签的动画的第一帧出现在屏幕上时立即开始。 在切换两个动画时也能用到,只要它们的时基是同步的。 当anim_timebase为False时将使用显示体时基(displayable timebase),它是从显示体显示后的第一帧开始。这样可以确保整个动画可见,即使在屏幕上已有一个具有相同图像标签的图像。
动画函数为以下这些:
关于该内容我们举个例。 该例子演示了如何创建一个眨眼效果。该角色将在一分钟内任意地、随机地执行一个3帧的眨眼动画。
init:
image blinking = anim.SMAnimation("a",
anim.State("a", "eyes_open.png"),
# 这个Edge将使眼睛保持睁开一秒钟。
anim.Edge("a", 1.0, "a", prob=60),
# 而这个Edge将使眼睛开始闭上。
anim.Edge("a", 0.25, "b"),
# ..接着到半闭。
anim.State("b", "eyes_half.png"),
# 然后继续...
anim.Edge("b", 0.25, "c"),
anim.State("c", "eyes_closed.png"),
anim.Edge("c", 0.25, "d"),
anim.State("d", "eyes_half.png"),
# 然后回到a 。
anim.Edge("d", 0.5, "a")
)
记住:State可以用Position参数,而Edge可以用过渡效果。 这样你可以在屏幕上移动图像,叠画(dissolve)图像或者是其它更复杂的效果。 (不过请注意,在使用SMAnimation时并非所有的过渡效果都会如你所愿。)
这些显示体的作用是在屏幕上同时对复数的显示体进行布局。
Ren'Py支持粒子运动。 所谓粒子运动是指同时在画面上显示大量的粒子的运动。这些粒子的描画周期要短于单一的交互动作。 粒子运动可以屏幕上同时移动复数的东西,比如说像降雪,落花,气泡,萤火虫等。 我们的粒子运动引擎提供了两种不同的界面。 函数对于大多数线性下降或上升的粒子来说是最为方便的。而则可使用粒子引擎完整的功能。
is a function that can be used for the common case of linearly rising or falling particles. 通常用来表现下雪,樱吹雪或是上升气泡等效果。
要先定义一个图像才可使用。
init:
image blossoms = SnowBlossom(Animation("sakura1.png", 0.15,
"sakura2.png", 0.15))
像花雪这样的效果要同时出现复数的图像才有意义。 比说如,在一个樱吹雪的场景中,我们可以让角色背后的花瓣小一些,下降的速度慢一些;而角色前面的花瓣则大一些,速度也要快一些。
如果你对的效果不满意,你可以定义自己的粒子运动。 这时你就需要调用函数。
在scene和show语句的at子句中使用这些功能才有效。 这些函数也可以被调用(二次调用)以返回一个显示体。
通常,当图像比屏幕还要大时,你会想要使用,反之,你可能使用。 和都是的特例。
也可以用来声明复杂的运动。 在States中使用None来代替图像,同时在state之间提供一个运动过渡。 所创建的SMAnimation可以传递到图像的at子句,这样就可以在屏幕上到处移动。
这种运动子句也可被用作../Transitions/,因为它们影响整个图层的位置。
这些位置可以用作scene和show语句的at子句的参数。
这时图像的左边缘将和屏幕的左边缘对齐,而下边缘则和屏幕的下边缘对齐。
这时图像的右边缘将和屏幕的右边缘对齐,而下边缘则和屏幕的下边缘对齐。
这时图像将水平置于屏幕中央,而下边缘则和屏幕下边缘对齐声。
这时图像将被放置在屏幕左边缘之外。 注意:图像处于此位置时,尽管对于玩家来说是不可见的,但仍然消耗资源。所以当一个图片不可见时最好将它隐藏(hide)掉。 该位置一般在移动过渡中使用。
这时图像将被放置在屏幕右边缘之外。 注意:图像处于此位置时,尽管对于玩家来说是不可见的,但仍然消耗资源。所以当一个图片不可见时最好将它隐藏(hide)掉。 该位置一般在移动过渡中使用。