Project1

标题: 使用快速读取脚本后地图短暂错位 [打印本页]

作者: hy2000    时间: 2021-4-1 06:26
标题: 使用快速读取脚本后地图短暂错位
本帖最后由 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的执行,让画面强制中间不刷新,勉强算是表现层解决了
          但这么做会有潜在性的隐患,最好还是能找到源头……
作者: 白嫩白嫩的    时间: 2021-4-1 14:50
本帖最后由 白嫩白嫩的 于 2021-4-4 20:13 编辑

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


或者你换个脚本试试?

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




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

JAVASCRIPT 代码复制
  1. if (DataManager.loadGame(index)) {
  2. $gamePlayer.reserveTransfer($gameMap.mapId(), $gamePlayer.x, $gamePlayer.y);
  3. $gamePlayer.requestMapReload();
  4. SceneManager.goto(Scene_Map); }







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