Project1

标题: 求教如何初始化一张地图 [打印本页]

作者: 仇九    时间: 2020-7-28 15:55
标题: 求教如何初始化一张地图
求教如何初始化一张地图?
就是将地图初始化为最初状态,所有的事件的独立开关都关闭,所有的事件都回归未触发状态。
作者: moonyoulove    时间: 2020-7-28 17:14
切换地图后事件都是重新触发的,唯一不变是独立开关,所以只要处理他就好,然而不是出现条件不是独立开关的就比较难处理了
作者: 仇九    时间: 2020-7-29 08:46
切换地图以后一切都是重新触发的,只要把开关等都关闭即可!
这是我写的函数,当插件一样用就可以。
在脚本里执行$gameMap.SX(mapid)就可以将指定的地图中的独立开关都关掉。
但是很明显,其80%的内容都只是为了读取指定地图的事件总数而已。如何化简这80%?




Game_Map.prototype.SX = function(value) {
    var mapId = value.toString();
    while (mapId.length < 3) {
        mapId = '0' + mapId;
    }
    var dataread = new XMLHttpRequest();
    dataread.open('GET', 'data/' + 'Map%1.json'.format(mapId));
    dataread.overrideMimeType('application/json');
    var length = 0;
    dataread.onload = function() {
        datareadText = dataread.response;
        length = JSON.parse(datareadText).events.length;
        for (var i=1;i<length;i++){
        $gameSelfSwitches.setValue([value, i, "A"], false);
        $gameSelfSwitches.setValue([value, i, "B"], false);

        $gameSelfSwitches.setValue([value, i, "C"], false);
        $gameSelfSwitches.setValue([value, i, "D"], false);
    }
    }
    dataread.send();

};
作者: 开关关    时间: 2020-7-29 09:18
本帖最后由 开关关 于 2020-7-29 10:12 编辑
仇九 发表于 2020-7-29 08:46
切换地图以后一切都是重新触发的,只要把开关等都关闭即可!
这是我写的函数,当插件一样用就可以。
在脚本 ...


存储独立开关的对象是一个全局对象,可以看看它的结构:



这个结构非常简单,直接存放独立开关状态的就是个名为 _data 的键值对。其中键的格式是“地图id,事件id,独立开关名”。从中还能发现一个规律,只要独立开关是关闭的,这个键值就不存在。而且看 Game_SelfSwitches 类的 clear 方法,它还原所有独立开关的方式就是把 _data 的成员删光。找到规律就好办了,只要你的全局变量总数并不多,就建议采用下面这种更加简洁的写法:

JAVASCRIPT 代码复制
  1. var mapId = 3;
  2. var pattern = new RegExp('(^' + mapId + ',)');
  3. for(var i in $gameSelfSwitches._data){
  4.     if(pattern.test(i)){
  5.         delete $gameSelfSwitches._data[i];
  6.     }
  7. }


将符合地图id为3这个条件的成员直接删光。亲测有效。
作者: 仇九    时间: 2020-7-29 13:48
开关关 发表于 2020-7-29 09:18
存储独立开关的对象是一个全局对象,可以看看它的结构:

已经测试,的确可用,非常感谢!我本来在阅读js时已经明白:独立开关实际上不是和事件绑定的(我这说法不专业……),而且我在rpg_objects里发现了“关闭一个独立开关就是把相关的数据删除而不是转为false”这件事。但是我自以为得一个一个删,需要得到这个地图的事件id最大值,所以我才照搬写了那么麻烦的脚本。现在看来只要把对应mapid里的数据全删除即可。




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