赞 | 136 |
VIP | 0 |
好人卡 | 0 |
积分 | 281 |
经验 | 0 |
最后登录 | 2024-11-16 |
在线时间 | 1412 小时 |
Lv5.捕梦者
- 梦石
- 16
- 星屑
- 12060
- 在线时间
- 1412 小时
- 注册时间
- 2020-3-21
- 帖子
- 365
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 仇九 于 2022-12-28 19:06 编辑
一般来说使用MV原生的寻路算法,寻路半径只有12格。
将寻路半径改大时,改到18+的时候就开始卡顿了。
为了解决这个问题我写了这个脚本。
使用了库:https://github.com/qiao/PathFinding.js
* ================================================================
* 1.此脚本只有两个可以写在移动路线中的“脚本”中指令。
* (1) this.fpXy(tarX,tarY)
* 向指定点移动一格。
* (2) this.fpChar(characterId)
* 向指令事件/玩家移动一格。
* characterId:写-1时代表玩家,写大于0的数字代表指定事件。写其余数字无效。
* (3) 也可在最后加参数showTrace:
* this.fpXy(tarX,tarY,showTrace)
* this.fpChar(characterId,showTrace)
* showTrace写true时,该事件每进行一次寻路,都会在地图上显示出路径的格子图。方便检查。
* 同时只能有一个事件的寻路的showTrace为true。
* 此图仅用于测试,在正式游戏中建议关闭。
* 2.库一共提供了如下几种寻路算法:
* 0.AStarFinder * (A*算法)
* 1.BestFirstFinder
* 2.BreadthFirstFinder *
* 3.DijkstraFinder *
* 4.IDAStarFinder.js *
* 5.JumpPointFinder * (跳跃点算法)
* 6.BiAStarFinder (双向A*算法)
* 7.BiBestFirstFinder
* 8.BiBreadthFirstFinder *
* 9.BiDijkstraFinder *
* 其中加*的能够确保找到最短路径,前面加Bi的是双向寻路算法。
* 不同的游戏适合不同的算法。
* 3.若无特殊要求,只建议使用第 0 个算法。
* 虽然第0个和MV原本的寻路一样都是A*算法,但是通过预处理和数据再利用,其运算效率比MV
* 原有的寻路要快很多。可以支持比较大的地图和特别复杂地图的寻路。
* 4.此脚本不支持像素移动的寻路,若有此特殊要求请联系我。
* 5.尽管此插件将原有的寻路范围扩展至近百,但仍旧需要考虑效率的影响。
* 地图的复杂度对寻路的效率的影响相对来说小,但是地图的大小对寻路的效率的影响很大。
* 以默认的AStarFinder为例:
* (1)在范例1中的地图中:事件在(0,0)玩家在(10,12),事件追逐玩家。
* 初始寻路路径长度:44
* 第一次寻路(需进行初始化,所需时间长): 范围为0.90~1.00ms 平均0.95ms
* 之后寻路: 范围为0.11~0.21ms 平均0.15ms
* (2)在范例2中的地图中:事件在(0,0)玩家在(99,99),事件追逐玩家。
* 初始寻路路径长度:860
* 前三次寻路(前几次寻路时间不稳定,均取前三次的最大值): 范围为14.00~17.00ms 平均15.17ms
* 之后寻路: 范围为0.94~1.40ms 平均1.07ms
* 注意地图越大,绘制移动轨迹(上方第1点中的showTrace为true时)所消耗的资源越多。
* 若想测试具体耗时或者性能请不要绘制轨迹。
* 地图大小最好小于100*100,但是地图的复杂度可任意设置。
* 6.斜向移动。
* 有些算法默认了必须进行斜向移动,例如JumpPointFinder,即使右方的插件参数中将斜向移动设为false,寻路时
* 事件仍旧会斜向移动。
* 7.玩家寻路。
* 玩家点击地图,系统进行自动寻路时是否使用本插件的寻路方法。
* ================================================================
* ================================================================
链接:https://pan.baidu.com/s/18KsVDIgrlynQlLjWqFQVFg?pwd=9999
|
|