查看: 2699|回复: 6

[有事请教] 使用快速读取脚本后地图短暂错位

[复制链接]
梦石
0
星屑
3053
在线时间
441 小时
注册时间
2014-11-21
回帖
103
发表于 2021-4-1 06:26:49 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 hy2000 于 2021-4-4 11:52 编辑
  1. (function() {
  2.     const Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
  3.     Game_Interpreter.prototype.pluginCommand = function (command, args) {
  4.         Game_Interpreter_pluginCommand.call(this, command, args);
  5.         if (command.toLowerCase() === 'autosave') {
  6.             let saveId = 1;
  7.             if (args && args[0]) {
  8.                 saveId = parseInt(args[0]);
  9.             }
  10.             $gameSystem.onBeforeSave();
  11.             if(DataManager.saveGame(saveId)) {
  12.                 StorageManager.cleanBackup(saveId);
  13.             }
  14.         }
  15.         if (command.toLowerCase() === 'autoload') {
  16.             let saveId = 1;
  17.             if (args && args[0]) {
  18.                 saveId = parseInt(args[0]);
  19.             }
  20.             if(DataManager.loadGame(saveId)) {
  21.                 SoundManager.playLoad();
  22.                 SceneManager._scene.fadeOutAll();
  23.                 $gamePlayer.reserveTransfer($gameMap.mapId(), $gamePlayer.x, $gamePlayer.y);
  24.                 $gamePlayer.requestMapReload();
  25.                 SceneManager.goto(Scene_Map);
  26.                 $gameSystem.onAfterLoad();
  27.             }
  28.         }
  29.     }
  30. })();
复制代码

这是我找到的一个地图上快速存读档的脚本,但发现在地图上进行快速读取的时候,会有很短的一段时间仍然保留在读档前的地图,却使用了读档后地图的图块和方位导致错位现象。尤其是读档前后地图图块不一样的时候,地图会突然变得莫名其妙一瞬间,很那看。
我尝试新建工程使用这个脚本,却没有这个问题;但备份删光我的工程中其他脚本后依然有这个问题,应该不是脚本冲突的原因,猜测可能和地图数量/复杂程度导致的读取速度有关系?

错位前

错位前

错位的状态

错位的状态

错位效果如图(读档前与读档的一瞬间,读档时不知为何读取了读档目标地图的图块,却有一瞬间仍然保持在原地图),读档前后两张地图使用了相同的ABC层,但DE层不一样,读档时发生短暂错位
去Scene_Map和Game_Map类里面鼓捣了半天也没找到其源头,不知道有没有大佬有头绪可能的原因?

更新:目前靠强行黑掉Spriteset_Map.update的执行,让画面强制中间不刷新,勉强算是表现层解决了
          但这么做会有潜在性的隐患,最好还是能找到源头……
梦石
0
星屑
3922
在线时间
1198 小时
注册时间
2016-8-9
回帖
2355

开拓者

发表于 2021-4-1 14:50:13 | 显示全部楼层
本帖最后由 白嫩白嫩的 于 2021-4-4 20:13 编辑

自制一张读取图片,比如加上自己的logo什么的放在100层,然后开启脚本,然后再淡出图片,试试图片能不能遮丑


或者你换个脚本试试?

我用的是2楼坦克大佬提供的最后一个脚本




或者用用这个下面这个,这个是从国外分享的事件脚本里看到的

[pre lang="javascript"]if (DataManager.loadGame(index)) {
$gamePlayer.reserveTransfer($gameMap.mapId(), $gamePlayer.x, $gamePlayer.y);
$gamePlayer.requestMapReload();
SceneManager.goto(Scene_Map); }
[/pre]

点评

现在我的做法是强行给System做一个freeze来黑掉SpriteMap的update,让地图强制不刷新来使中间只会黑掉,虽然会有潜在的效率问题,先凑活用着吧()  发表于 2021-4-5 06:14
哎,这就没办法了,不过不要太难受,我看正规的商业游戏也难免出一些不严重的bug而且也不修复,放宽心先把游戏内容做好再解决这个问题吧  发表于 2021-4-4 20:02
不行,读取是会把图片显示也换掉的;我尝试在脚本对应部分加,但似乎执行显示还是比这个瞬间晚,起不到作用  发表于 2021-4-4 11:33
哈哈哈,瓜瓜酱一直很幽默啊~~  发表于 2021-4-2 15:19
图片遮丑有我内味了  发表于 2021-4-1 21:06
酸酸甜甜就④哇噢
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部