Event 与 Interpreter

事件触发类型

event._trigger的值与对应触发类型和其运行环境

触发类型 运行环境
确定键 0 $gameMap._interpreter
玩家接触 1 $gameMap._interpreter
事件接触 2 $gameMap._interpreter
自动执行 3 $gameMap._interpreter
并行处理 4 Event._interpreter


翻译器内脚本上下文

脚本中的this指向翻译器
通过this._eventId可以获取所属事件 ID
公共事件会作为子事件队列继承父事件的_eventId
通过$gameMap.event(eventId)可以获取到触发的事件

自动执行和并行处理

并行事件是由Game_Event对象自身的_interpreter中执行的
而其他事件是由于当前的地图对象Game_Map中的_interpreter执行
在同一update()生命周期中, 只有一个需要等待的事件会在Game_Map中执行, 包括公共事件
在这个事件其后的所有事件会因为交还控制权给update而被跳过
而同一update()生命周期中, 多个需要等待的事件会在Game_Event中分别执行

翻译器等待

翻译器在执行需要等待的事件后会进入等待模式
在等待模式下, 会跳过翻译器在本次update()中的执行, 直到满足某种条件才会继续进行

  1. _waitCount 计时器不为空
  2. _waitMode 等待模式不为''

当执行定时-等待事件时, 会设置一个等待倒计时_waitCount
当执行一些需要等待的事件, 比如移动-设置移动路线...时, 会设置_waitMode
每次 update 会执行_waitMode对应的检查来判断事件是否需要继续等待

事件数据加载

数据初始化: Game_Map.prototype.setupEvents
$dataMap.events获取地图事件信息, 创建对应的Game_Event对象记录到_events
输出: Game_Map.prototype.events
暴露_events给外部调用

事件图像加载

加载到容器: Spriteset_Map.prototype.createCharacters

Scene_Map.prototype.onMapLoaded回调函数唤起
会对Game_Map.prototype.events()中每一个Game_Event创建一个Sprite_Character
新的Sprite_Character会放入_tilemap容器中在周期中被渲染

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容