5.事件编辑 - neveis/RPGMakerFP GitHub Wiki
事件是游戏制作中最关键的一个部分。剧情流程,NPC互动等等都是依靠事件来完成的。
事件是通过JSON格式存储的,也就是以JSON文件作为配置文件。
由于事件数据具有一定的格式,纯人工编写显得有些繁杂,所以还简单的写了一个生成事件的小工具作为辅助。事件编辑器
程序只能生成部分顺序执行的事件,分支等情况还需要单独生成子事件列表再合并一起。
1.数据结构分析
下面先给出一个简单的例子,然后再做介绍。
{
"1": {
"triggerType": 0,
"pages": [{
"condition": [],
"switcher": [],
"subEvents": [{
"detail": {
"audioName": "LuoRiYuGe.mp3",
"loop": true,
"state": 0
},
"eventType": 25
},
{
"detail": {
"switcherId": "1",
"flag": true
},
"eventType": 15
}
]
},
{
"condition": [],
"switcher": ["1"],
"subEvents": [{
"detail": {
"audioName": "LuoRiYuGe.mp3",
"loop": true,
"state": 0
},
"eventType": 25
}]
}
]
},
"1-42-7": {
"triggerType": 2,
"pages": [{
"condition": [],
"switcher": [],
"subEvents": [{
"detail": {
"destMapId": "2",
"playerId": 1,
"destPos": {
"x": 640,
"y": 352
},
"direction": 4
},
"eventType": 3
}]
}]
}
}
上面这个JSON文件,包含了两个事件: 1
和1-42-7
,这表示的是事件的ID,也是事件的唯一标识。(怎么确定ID后面再介绍)
每个事件对象首先包含两个Key,分别是triggerType
和pages
。
triggerType:事件的触发方式,有3种方式。
1:点击主按键触发。
2:角色接触触发,也就是角色在该位置上时触发。
3:角色接触前触发,也就是角色移动到该位置之前触发。
pages:事件页。同一个事件ID可以根据不同的条件或开关运行不同的事件。
检测顺序是从后往前,当检测到符合条件,则运行该页,并且不继续往前检测。
接着来看pages
,这是一个数组,数组的每一个元素是一个对象,可以认为是一页事件。其中也包含3个Key,conditon
,switcher
和subEvents
。
condition:触发条件
switcher:触发开关
subEvents:子事件列表,当可运行时,会按顺序逐条运行。
真正要运行的事件序列在subEvents
中编写,subEvents
也是一个数组,顺序是从前到后。其中包含2个Key,detail
和eventType
。
detail: 具体的子事件参数,根据事件不同,对象的Key也不同。
eventType:子事件类型。
具体可用的事件类型以及所需参数在文章末尾会进行说明,或者可以参考EventHandle.js
文件,该脚本是事件调用的中间层。
(condition待补充)
2. 事件ID
每个场景中有两个与事件相关的文件,分别是MapEvent.js
和ActorEvent.js
。
MapEvent.js
中的事件是与地图上某个位置相关联的事件。ActorEvent.js
中的则是与角色相关联的事件。
MapEvent.js
中的事件ID有两种,第一种是以地图ID作为事件ID,如上面代码中的事件1
。该事件会在进入地图后自动运行。
第二种则是与位置相关的,如上面的事件1-42-7
,其中1
代表的地图ID,42
代表的是以块大小为单位的横坐标,7
代表以块大小为单位的纵坐标。
也就是说,与位置相关的事件ID格式为:MapID-TileX-TileY
。以左下角为原点,将像素坐标除以地图块大小,就可以得到Tile坐标。
MapEvent.js
中的事件ID只有一种,也就是以角色ID作为事件ID。
3.事件文件路径
事件文件需要按照一定路径存放,否则会出现找不到事件的问题。
MapEvent.js
和ActorEvent.js
应该放在 assets/resources/Scene/{MapID}/
路径下,其中{MapID}
是以该场景的地图ID命名的文件夹。
4.例子分析
可以看出,上面那段代码是MapID为"1"的地图的MapEvent。其中包含两个事件,一个事自动运行的事件"1",另一个是位置在块坐标为(42,7)的事件。
因为事件"1"是自动运行的事件,因此triggerType
不起作用,这里使用0以区分。
事件"1"有两页事件,运行时会先检测第1页,如果不符合运行条件,也就是开关1
不为true
,那么就运行第0页。
当第一次进入到地图1,会先运行第0页(因为开关1
不为true
)。
第0页执行的事件是:1.播放背景音乐。2.将开关1
设为true
。
当离开地图1之后再进入,那么就会运行第1页(开关1
为true
)。
事件"1-42-7"是一个典型的切换地图事件。当角色走到事件位置时,切到换地图2,位置在(640,352),朝向向左。
5.事件列表
建议直接使用事件编辑器进行编辑。
(后续会对某一些事件的参数进行解释)