马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
Ren'Py引擎从入门到放弃(13)——ATL要点拾遗
世上无难事,只要肯放弃。
这是入门介绍的第十三篇,着重介绍几个ATL方面的要点。因为,后面要考!!(敲黑板)
第一个问题:event语句有什么用?
答:往深了说,这是设计模式范畴的问题。
计算机程序运行过程中,各种数据不断变动,同时产生纷繁的信息。当程序的某个模块或者组件需要根据某些数据或者信息作出响应时,就需要一个获取信息的通道。解决这种需要的一种设计模式称做“事件总线模式”或者“监听者模式”。具体的不在本文内容范畴内,就先略过……使用这种设计模式的原因是,单个的模块或者组件不可能也没必要不停地去查看其他模块、组件的状态以决定是否产生自身需要的信息,所以设计出一个总线或者事件中心,来统一完成信息的首发。event直译的话,就是“事件”,也就是组件或模块产生的信息。
举个例子,我们定义了一个图片并显示:
[RenPy] 纯文本查看 复制代码 image test_image = "image.png"
当我们使用show语句显示图片时,这个image就会自动产生一个叫做“show”的event;同样,当我们使用hide语句隐藏图片时,也会自动产生一个叫做“hide”的event。这两个event是Ren'Py引擎自带的,不想要也得要!
如果制造几个原来没有的event,就可以在transform中使用event语句生成自定义的event了。
好像可以生成event了……但这玩意儿到底有什么用?
event语句生成事件,on语句监听事件。监听到需要的事件后,你们想干啥就干啥……
(理论上应该是这样,实际上自定义的event只能在其所属的transform代码块中有效,其他transform中是没效果的,至少我没搞定不同transform监听同一个自定义event的问题。)
官方文档里的样例代码如下:
[RenPy] 纯文本查看 复制代码 show logo base:
on show:
alpha 0.0
linear .5 alpha 1.0
on hide:
linear .5 alpha 0.0
transform pulse_button:
on hover, idle:
linear .25 zoom 1.25
linear .25 zoom 1.0
on语句中的 show、hide、hover 和 idle 是Ren'Py自带的4种 event,分别表示图片显示、隐藏、指针悬置 和 空闲状态。这两段代码分别让图像淡入淡出,以及获取和失去鼠标焦点时执行一个缩放动画。
logo淡入淡出
logo淡入淡出
按钮获取鼠标焦点
按钮获取鼠标焦点
关键点就在这里:show、hide、hover 和 idle,这4个自带的 Extenal Event。请务必理解生成各 event的触发条件,后面定制化GUI会用到。
回到问题本身,event语句暂时来看的确没啥用处,on语句很有用……
第二个问题:contains 和 function语句又有什么用?
答:一般来说 contains用来在其他 image上加上 transform 中定义的 image,类似图层叠加。但是 contains语句不能多重嵌套。语法上不会报错,多层嵌套的结果是只显示 transform最外层的效果。另外,contains必须包含至少一个 image对象。
除了这种浅显的手法,contains有个特殊用途,用于不能直接定义 image而使用 Image()类 或 Frame()类定义图像的地方。因为 Image()类 和 Frame()类的定义不能使用序列帧,而 transform中是可以直接定义序列帧的。比如,上一篇中自定义对话框中就使用了这个办法。
function语句主要用来做 transform动画,类似其他通用游戏引擎里的动画曲线,可以实现某个或某些properties的精准控制。具体的放在下一篇里说。
第三个问题:哪些情况下可以触发External Events?
答:根据官方文档:
中文文档:动画和变换语言
start是预定义的事件,所有对象都默认会发送;
show、replace、hide在使用show 和 hide语句时发送;
replaced是在 transform被替换时发送,应该是指被替换的 transform;
update是在GUI整套替换或切换语言类型时发送,仅仅用于修改分辨率和修改语言设置项的情况;
hover、idle、selected_hover 和 selected_idle 仅对 按钮(button)对象发送,普通的文本或者图片对象是监听不到这4个事件的(敲黑板,这个是考点)。
扯淡部分:
风吹鸡蛋壳,财去人安乐。
大半年过去了,算了算了……
预告部分:
后续开始做定制化GUI部分,预计会有4、5篇的样子。ALT的基础请务必掌握,不然你们会比我更早放弃的……
|