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

Project1

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

[有事请教] MV如何获取其他地图的指定事件信息?[已解决]

[复制链接]

Lv3.寻梦者

梦石
0
星屑
2865
在线时间
427 小时
注册时间
2014-11-21
帖子
144
跳转到指定楼层
1
发表于 2021-2-28 12:04:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 hy2000 于 2021-3-2 09:42 编辑

如题,我知道$gameMap.event(i)可以获取当前地图i号事件的信息,现在我想获取其他地图中指定编号事件的信息,然后调用它的name,_character_name等等参数
之前xp和va都可以走load_data,我仿照使用了DataManager里的loadMapData,但不管是直接跑然后调$dataMap,还是仿写后调自己的变量,输出都是null,鼓捣了一阵没研究出是哪里出了问题,因此来询问一下MV实现这个功能应该怎么写?

Lv2.观梦者

梦石
0
星屑
614
在线时间
61 小时
注册时间
2021-1-17
帖子
7
2
发表于 2021-2-28 14:24:36 | 只看该作者
其他地图应该不加载的吧,肯定没法直接获取啊。可以通过开关变量获取,或者直接用公共事件。

点评

不直接加载,但肯定有载入的方式,所以手动加载是能调的;面向函数的参数是事件,所以如果不直接调的话只能重写一份不同参数的对应函数  发表于 2021-2-28 21:53
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
16
星屑
11242
在线时间
1325 小时
注册时间
2020-3-21
帖子
357

极短23获奖

3
发表于 2021-3-1 23:57:23 | 只看该作者
JAVASCRIPT 代码复制
  1. DataManager.loadMapDataX = function(mapid) {
  2.     if (Number(mapid) > 0) {
  3.         var mapdata;
  4.         var xhr = new XMLHttpRequest();
  5.         var url = 'data/' + 'Map%1.json'.format(mapid.padZero(3));
  6.         xhr.open('GET', url,false);
  7.         xhr.overrideMimeType('application/json');
  8.         xhr.onload = function() {
  9.             if (xhr.status < 400) {
  10.                 mapdata = JSON.parse(xhr.responseText);
  11.                 DataManager.extractMetadata(mapdata);
  12.                 var array = mapdata.events;
  13.                     if (Array.isArray(array)) {
  14.                             for (var i = 0; i < array.length; i++) {
  15.                                     var data = array[i];
  16.                                     if (data && data.note !== undefined) DataManager.extractMetadata(data);
  17.                             }
  18.                     }
  19.             }
  20.         };
  21.         xhr.send();
  22.         return mapdata;
  23.     }
  24. };

写了个新函数,就是把原来mv的DataManager.loadMapData给修改了一下,新函数DataManager.loadMapDataX(地图的id)的返回结果就是获取到的地图数据。
若是要调用其数据的话,不妨可以用脚本指令写console.log(DataManager.loadMapDataX(地图的id));然后按F12查看。
例如调取5号地图id为6的事件的数据:DataManager.loadMapDataX(地图的id).events[6]。


我是在仿写glav大佬的spawnevent脚本的时候发现其只能复制指定的地图(在插件参数里设置的最多3个地图,后来明白glav大佬是在开始游戏时预载这三个地图的数据,使复制地图时速度更快),我想直接使其能复制更多数量的地图的事件(这样每次复制时都读取,会有很短的延迟或卡顿),于是我进行了修改。
若是只调用DataManager.loadMapData(地图的id),然后再输出$dataMap,那么只会得到undefined或者说现地图的地图数据。原因是此处mv是异步请求(可百度XMLHttpRequest)的,调用DataManager.loadMapData(地图的id)和输出$dataMap之间必须隔上至少20帧以上(我不清楚为什么是20帧这么长),才能在输出$dataMap时成功输出(系统得到读取指令后,读取且处理完成了后才给$dataMap赋值,所以有延迟,是异步)。但是很明显这会覆盖$dataMap,出现未知问题,所以你可以直接参考我给的函数。
新人轻喷。

点评

感谢大佬!之前一直用的xp和va,对mv的机制不是很了解,看来是这个延迟导致的,之后有空再仔细研究一下这一块  发表于 2021-3-2 09:41
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-16 11:21

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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