2. 接下来,轮到讲解第二段 — 如何求得每个可交互的NPC与玩家之间的距离
2a. var eventsDistance = []的意思是声明一个名为eventsDistance的变量,同时赋值它为一个空数组[]
2b. var eventList = $gameMap.events().filter(e => e.event().meta.point)的意思是声明一个名为eventList的变量,
同时赋值它的值为$gameMap.events().filter(e => e.event().meta.point)
2b1. $gameMap.events()是一个RM內置于Game_Map的函数,作用是返回一个数组,数组当中包含了当前地图內,所有事件(Game_Event)的实例
2b2. array.fliter(元素e => 条件)是一个与数组(array)相关的內置函数,中文可以理解为「过滤器」。
能夠根据自定义的条件,从数组array中过滤出一个包含了「符合条件的元素e」的数组
2b3. e.event().meta.point的值在事件的备注栏有填写<point>时返回true,无填写<point>时返回undefined
2c.
for循环不多赘述。而array.push(元素e)也是一个与数组(array)相关的內置函数,作用是往数组array的末尾添加元素e
综合以上內容,本文第二段的实际运作情境:
假设当前地图有三个事件,其中2号事件的备注栏无填写<point>
在var eventList = $gameMap.events().filter(e => e.event().meta.point)过后,
eventList的值会是[1号事件, 3号事件]
假设玩家的画面 X 坐标, 画面 Y 坐标是(408, 330),1号事件的是(456, 522),3号事件是(504, 282)
在for循环两次eventsDistance.push(distance(408, 330, n号事件的画面 X 坐标, n号事件的画面 Y 坐标))过后,
eventsDistance的值会是[197.9090700296477, 107.33126291998991]
以下是玩家与1号事件之间距离的计算
Math.sqrt(Math.pow(Math.abs(408 - 456), 2) + Math.pow(Math.abs(330 - 522), 2))
=Math.sqrt(Math.pow(Math.abs(-48), 2) + Math.pow(Math.abs(-192), 2))
=Math.sqrt(48^2 + 192^2)
=Math.sqrt(39168)
=197.9090700296477
收起