设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 996|回复: 4
打印 上一主题 下一主题

[有事请教] 关于地图刷新和打开菜单返回地图不一致的情况

[复制链接]

Lv1.梦旅人

梦石
0
星屑
162
在线时间
39 小时
注册时间
2022-3-14
帖子
17
跳转到指定楼层
1
发表于 2022-4-24 17:12:58 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
20星屑
这几天一直在研究随机迷宫,已经能够做出随机迷宫了(虽然迷宫的顶还不够完善),但现在一个最大的问题:

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

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



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

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

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

是不是这句话有问题

最佳答案

查看完整内容

MV中菜单取消触发→ Scene_Base.prototype.popScene 调用→ SceneManager.pop() 返回上一级场景 触发 → SceneManager.goto 联动 → SceneManager.updateMain 下的 → SceneManager.changeScene 重新触发 该转换场景的 create 。 而 Scene_Map 下的 create 调用了 → DataManager.loadMapData(mapId) 读入相应文件,更新(覆盖)了 $dataMap。到此,$dataMap.data 便还原了。 数据还原后,MV在画图前会检查一遍数据是否已准备就 ...

Lv3.寻梦者

梦石
0
星屑
3053
在线时间
318 小时
注册时间
2015-4-30
帖子
92
2
发表于 2022-4-24 17:12:59 | 只看该作者
本帖最后由 在野月光族 于 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,上面只是举个例而已。
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3053
在线时间
318 小时
注册时间
2015-4-30
帖子
92
3
发表于 2022-4-25 11:07:18 | 只看该作者
拦截Scene_Map.prototype.isReady写分支,关联已修改的$dataMap.data。
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
162
在线时间
39 小时
注册时间
2022-3-14
帖子
17
4
 楼主| 发表于 2022-4-25 11:38: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();
}
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
162
在线时间
39 小时
注册时间
2022-3-14
帖子
17
5
 楼主| 发表于 2022-4-26 14:49:17 | 只看该作者
在野月光族 发表于 2022-4-24 17:12
MV中菜单取消触发→ Scene_Base.prototype.popScene 调用→ SceneManager.pop() 返回上一级场景 触发  ...

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

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-5-21 14:39

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表