Project1

标题: 关于地图刷新和打开菜单返回地图不一致的情况 [打印本页]

作者: laoyao    时间: 2022-4-24 17:12
标题: 关于地图刷新和打开菜单返回地图不一致的情况
这几天一直在研究随机迷宫,已经能够做出随机迷宫了(虽然迷宫的顶还不够完善),但现在一个最大的问题:

使用插件命令,生成迷宫后,打开各种菜单返回后,直接就会变成未生成随机迷宫的地图。。。

脚本小白一个,实在是找不到原因了,求大神解答下:



使用了 $dataMap.data[posi] =X;  去改变图块,用refresh()可以刷新出随机迷宫 ,但 $dataMap.data的值还是原json里的data值。。。所以一旦打开菜单、商店再返回地图时,就会回到原先的样子

感觉就像是没写入(确实也不知道怎么写入)

mapnow=SceneManager._scene._spriteset._tilemap;
mapnow.refresh();  可以让迷宫正常显示

是不是这句话有问题


作者: 在野月光族    时间: 2022-4-24 17:12
本帖最后由 在野月光族 于 2022-4-26 07:25 编辑






MV中菜单取消触发→ Scene_Base.prototype.popScene 调用→ SceneManager.pop() 返回上一级场景 触发 → SceneManager.goto 联动 → SceneManager.updateMain 下的 → SceneManager.changeScene 重新触发 该转换场景的 create 。
而 Scene_Map 下的 create 调用了 → DataManager.loadMapData(mapId) 读入相应文件,更新(覆盖)了 $dataMap。到此,$dataMap.data 便还原了。
数据还原后,MV在画图前会检查一遍数据是否已准备就绪,于是上述便拦截到 isReady。楼主可以根据自身需要顺藤摸瓜拦截到其他地方,也不一定就是 isReady,上面只是举个例而已。
作者: 在野月光族    时间: 2022-4-25 11:07
拦截Scene_Map.prototype.isReady写分支,关联已修改的$dataMap.data。
作者: laoyao    时间: 2022-4-25 11:38
但现在有一个问题
                mapnow.refresh();     这一步能够刷新出来迷宫
                alert($dataMap.data);   这一步就显示的是JSON文件里的原来的data数值,  这不正常吧

还有,我才刚学JS脚本,
按您说的最下面加了一段,是这样写的吗?(但实现不了)
Laoyao_RandomMap.first._isready = Scene_Map.prototype.isReady
Scene_Map.prototype.isReady =function(){
        Laoyao_RandomMap.first._isready.call(this);
        Laoyao_drawMap();
}
作者: laoyao    时间: 2022-4-26 14:49
在野月光族 发表于 2022-4-24 17:12
MV中菜单取消触发→ Scene_Base.prototype.popScene 调用→ SceneManager.pop() 返回上一级场景 触发  ...

解释的很透彻,谢谢大佬。。现在基本上解决了,我拦截了onMapLoaded ,同样解决了问题




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1