Project1
标题: 刷新事件怎么写 [打印本页]
作者: 入坑小萌新 时间: 2021-7-8 13:17
标题: 刷新事件怎么写
一个事件,设置了开关但是打开事件图形没变化;可以能是插件影响的关系,
比如,设定事件页2开关a打开,但是开关a开了到事件页2了,图像却没刷新;
需要切换地图才能刷新。
问一下,这种要怎么解决?
作者: QChan 时间: 2021-7-8 13:17
本帖最后由 QChan 于 2021-7-8 22:25 编辑
是之前的设置独立开关吗?
独立开关设置后应该是会自动刷新的,不太确定什么情况。
如果要刷新比较简单的方法是用 $gameMap.requestRefresh(); 他会刷新地图上所有事件。
也有针对单个事件的刷新方法,$gameMap.event(事件id).refresh();
如果没效果的话,可以截图下具体的事件和代码。
作者: 入坑小萌新 时间: 2021-7-8 20:06
作者: 入坑小萌新 时间: 2021-7-9 17:26
非常感谢,刷新事件有效果,不过我那不起作用
好像是....算了我不知道怎么形容,
反正就是我在事件页改动那加了个刷新就可以了,顺便问下这种写在原
代码(rpb_objects)下的是不是不能用重写啊?
作者: QChan 时间: 2021-7-9 18:23
本帖最后由 QChan 于 2021-7-9 18:30 编辑
重写可以参考下一些别人做的插件,基本所有的都能重写。
重写最好不要直接修改游戏原本的文件,或者覆盖到别人的重写。
一般是先建一个变量,保存重写前的方法。
然后重写调用下变量保存的方法, 这样可以执行到重写前的代码, 不会和其他人的重写起冲突。
一般其他插件也是这种写法,所以你的重写也不会被覆盖。
var _Game_Event_prototype_refresh = Game_Event.prototype.refresh;
Game_Event.prototype.refresh = function() {
_Game_Event_prototype_refresh.call(this);
// 你的代码
};
// 一些有参数的 call 的时候也要带参数
var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function(command, args) {
_Game_Interpreter_pluginCommand.call(this, command, args);
}
// 原本有返回值的,你也要给一个返回值。
// 记录重写前的方法
var _DataManager_makeSaveContents = DataManager.makeSaveContents;
DataManager.makeSaveContents = function() {
// 调用重写前的方法并且获取他的返回值
var contents = _DataManager_makeSaveContents.call(this);
// 你的代码
// 返回
return contents;
};
var _Game_Event_prototype_refresh = Game_Event.prototype.refresh;
Game_Event.prototype.refresh = function() {
_Game_Event_prototype_refresh.call(this);
// 你的代码
};
// 一些有参数的 call 的时候也要带参数
var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function(command, args) {
_Game_Interpreter_pluginCommand.call(this, command, args);
}
// 原本有返回值的,你也要给一个返回值。
// 记录重写前的方法
var _DataManager_makeSaveContents = DataManager.makeSaveContents;
DataManager.makeSaveContents = function() {
// 调用重写前的方法并且获取他的返回值
var contents = _DataManager_makeSaveContents.call(this);
// 你的代码
// 返回
return contents;
};
我记得这边是有个坑的, 可能莫名其妙会报错,一般插件的写法是会把代码都丢到一个大方法里的,防止和其他插件冲突。
你可以看一些大佬的插件代码结构
(function() {
var _Game_Event_prototype_refresh = Game_Event.prototype.refresh;
Game_Event.prototype.refresh = function() {
_Game_Event_prototype_refresh.call(this);
// 你的代码
};
})();
(function() {
var _Game_Event_prototype_refresh = Game_Event.prototype.refresh;
Game_Event.prototype.refresh = function() {
_Game_Event_prototype_refresh.call(this);
// 你的代码
};
})();
下面是重写执行效果
(function() {
var _Game_Event_prototype_refresh = Game_Event.prototype.refresh;
Game_Event.prototype.refresh = function() {
_Game_Event_prototype_refresh.call(this);
// 你的代码
console.log('刷新了');
};
})();
(function() {
var _Game_Event_prototype_refresh = Game_Event.prototype.refresh;
Game_Event.prototype.refresh = function() {
_Game_Event_prototype_refresh.call(this);
// 你的代码
console.log('刷新了');
};
})();
你截图的代码,如果要丢到那个地方执行的话,也可以考虑直接重写 setupPage
var _Game_Event_prototype_setupPage = Game_Event.prototype.refresh;
Game_Event.prototype.setupPage = function() {
_Game_Event_prototype_setupPage.call(this);
if(Tilv.SHJ.isMonster(this._eventId)) {
Tilv.SHJ.update();
console.log('sx');
}
};
var _Game_Event_prototype_setupPage = Game_Event.prototype.refresh;
Game_Event.prototype.setupPage = function() {
_Game_Event_prototype_setupPage.call(this);
if(Tilv.SHJ.isMonster(this._eventId)) {
Tilv.SHJ.update();
console.log('sx');
}
};
欢迎光临 Project1 (https://rpg.blue/) |
Powered by Discuz! X3.1 |