RPGMakerMV探秘19-自动执行事件诞生记

今天主要看下自动执行事件的运行大致过程。
首先,事件是定义在地图场景Scene_Map上,我们从“开始新游戏”开始一步步看该事件是怎么运行的。

commandNewGame命令通过数据管理器DataManager创建了很多游戏对象,还进行了一些基础操作,选择存档文件、初始化队伍、初始化位置、重置游戏时间等。

场景管理器Scene_Manager通过goto命令切换至Scene_Map。

实际就是构建了Scene_Map的一个实例赋值给this._nextScene。之前的文章我们已经知道,Scene_Boot加载完后,将游戏控制权限基本交给了场景管理器,场景管理器通过requestAnimationFrame不停的执行刷新操作。



以上过程是update方法中比较核心的步奏,场景的切换及刷新都在上述代码中完成。
Scene_Map中几个重要的方法的执行顺序如下:

construct是构造过程,在goto时执行;create是创建过程,通过场景管理器控制执行;isReady是start的一个条件方法,isReady表示资源的加载的情况,只有加载完成后,场景管理器才会调度执行start方法。最后则是update过程。
isReady中有两个重要的步奏:


图一中的setupEvents方法,将event(事件)加载到地图场景,图二则创建了地图场景上的显示窗口。


自动执行事件的特性是自动执行,不需要触发命令,那么他应该属于interpreter。



上面两个步奏将event中自动执行事件转换成了Game_Interpreter,当执行Game_Interpreter的update时 :




command101中对$gameMessage进行了操作,而GameMessage便是游戏中对话框的信息对象:

还记得上面有一个步奏是创建显示窗口,这些窗口都是作为子对象(child)添加到地图场景图层上的,Scene_Base的update方法会遍历刷新子图层:

而子图层其中之一便是Window_Message

上述过程便是我们在地图上添加了自动执行事件(文字显示)后,如何一步步显示的,当然,其中的细节的变量变化没有阐述出来,Scene_Map确实过于复杂。本文只分析一个大概的过程。