Project1
标题:
如何写插件覆盖RM原有的函数?
[打印本页]
作者:
asukalin
时间:
2022-11-25 20:47
标题:
如何写插件覆盖RM原有的函数?
在js里,函数貌似是叫“方法”?
我想修改rpg_windows.js和rpg_scene.js等文件中函数的内容。
例如,在地图画面按菜单键,原本是打开主菜单。
rpg_scene.js里对应的函数是
Scene_Map.prototype.callMenu = function() {
SoundManager.playOk();
SceneManager.push(Scene_Menu);
Window_MenuCommand.initCommandPosition();
$gameTemp.clearDestination();
this._mapNameWindow.hide();
this._waitCount = 2;
};
复制代码
我改成了按菜单键直接打开“返回标题”菜单。
直接修改rpg_scene.js很容易就做的到
Scene_Map.prototype.callMenu = function() {
SoundManager.playOk();
SceneManager.push(Scene_GameEnd);
Window_MenuCommand.initCommandPosition();
$gameTemp.clearDestination();
this._mapNameWindow.hide();
this._waitCount = 2;
};
复制代码
但我想保留着rpg_scene.js不碰,将我自己改的Scene_Map.prototype.callMenu函数放进插件里
放进插件里的函数即使和原有函数重名,似乎也不会覆盖,只是先后执行而已
怎么做才能让RM只运行插件里我写的callMenu函数,不运行它在rpg_scene.js里面原来的那个呢?
作者:
Fan723
时间:
2022-11-25 22:17
你的思路是没问题的,应该是你没找到对应调用的方法,而你修改的这个方法没有调用到吧。
作者:
jie119168
时间:
2022-11-25 23:24
你多看几个别的插件,覆盖式写法有规范的,多模仿一下
作者:
asukalin
时间:
2022-11-28 03:03
似乎搞明白了……
如果只是想覆盖,其实很简单。
例如,原来的js文件里有个函数叫Something.dosomething
在插件里这样写就可以:
Something.dosomething = function() {
//自己写的内容
};
复制代码
之前出现问题,是因为我模仿别人用了这种写法:
var _Something_dosomething = Something.dosomething;
Something.dosomething = function() {
_Something_dosomething.call(this);
//自己写的内容
};
复制代码
这样写会先运行原有的Something.dosomething,然后运行插件里新加的内容。
这种写法是在原函数的后面加入新东西,同时避免覆盖掉原函数的该做的事。
我的目的和他们的相反,如果那样写,结果看上去就会像是“同样的内容先后重复运行了两遍”了。
作者:
liuhuaxin5
时间:
2023-6-2 20:26
您好,我想覆盖其中的战斗部分的代码,如果用something.dosomething,如何保证他是运行的battle部分的代码呢?
作者:
liuhuaxin5
时间:
2023-6-2 20:36
liuhuaxin5 发表于 2023-6-2 20:26
您好,我想覆盖其中的战斗部分的代码,如果用something.dosomething,如何保证他是运行的battle部分的代码 ...
哦哦哦,是不是自己写一个新文件,在新文件里写战斗的代码,之后在战斗代码中调用something?
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1