我也正在做新建窗口的测试,正好也遇到了一些小问题,看看能不能解决你的:
以我的小窗口作为例子,我是新增了一个系统选单,在Scene_Menu下新增了个_systemWindow
首先你需要有新建窗口的过程:
Scene_Menu.prototype.create = function () { Scene_MenuBase.prototype.create.call(this); this.createGoldWindow(); this.createCommandWindow(); this.createSystemWindow(); this.createStatusWindow(); };
Scene_Menu.prototype.create = function () {
Scene_MenuBase.prototype.create.call(this);
this.createGoldWindow();
this.createCommandWindow();
this.createSystemWindow();
this.createStatusWindow();
};
中间那个createSystemWindow()就是新建窗口的命令。这个函数仿照其他几个createWindow窗口的写法来写:
Scene_Menu.prototype.createSystemWindow = function () { this._systemWindow = new Window_SystemMenuCommand(坐标, 坐标); this._systemWindow.setHandler('save', this.commandSave.bind(this)); this._systemWindow.setHandler('load', this.commandLoad.bind(this)); this._systemWindow.setHandler('options', this.commandOptions.bind(this)); this._systemWindow.setHandler('gameEnd', this.commandGameEnd.bind(this)); this._systemWindow.setHandler('cancel', this.onSystemCancel.bind(this)); this.addWindow(this._systemWindow); };
Scene_Menu.prototype.createSystemWindow = function () {
this._systemWindow = new Window_SystemMenuCommand(坐标, 坐标);
this._systemWindow.setHandler('save', this.commandSave.bind(this));
this._systemWindow.setHandler('load', this.commandLoad.bind(this));
this._systemWindow.setHandler('options', this.commandOptions.bind(this));
this._systemWindow.setHandler('gameEnd', this.commandGameEnd.bind(this));
this._systemWindow.setHandler('cancel', this.onSystemCancel.bind(this));
this.addWindow(this._systemWindow);
};
第一行估计就是你不成功的关键,你需要把你的窗口new 一下,这样才能成立。最后addWindow一下,把你的窗口加进当前Scene下。然后各个句柄的函数都要写一下,所有没声明的都要声明。
然后,那个new的Window_SystemMenuCommand的整个类是要自己重写的……
这里实在是太多了就贴几个关键的:
function Window_SystemMenuCommand() { this.initialize.apply(this, arguments); } Window_SystemMenuCommand.prototype = Object.create(Window_Command.prototype); Window_SystemMenuCommand.prototype.constructor = Window_SystemMenuCommand; Window_SystemMenuCommand.prototype.initialize = function (x, y) { Window_Command.prototype.initialize.call(this, x, y); this.select(last); ………………后面很多很多很多很多 };
function Window_SystemMenuCommand() {
this.initialize.apply(this, arguments);
}
Window_SystemMenuCommand.prototype = Object.create(Window_Command.prototype);
Window_SystemMenuCommand.prototype.constructor = Window_SystemMenuCommand;
Window_SystemMenuCommand.prototype.initialize = function (x, y) {
Window_Command.prototype.initialize.call(this, x, y);
this.select(last);
………………后面很多很多很多很多
};
简单来说你这个window可以照着你想模仿的那个窗口的完全代码都搬过来,虽然是完全复制但也得有这么一步,记得把名字改了,然后你需要的几个handler记得重写。
到这里大概明白了吗?你的Scene_actojs估计也是少了这个重写的过程,所以人家不认……
--------------------
当然我本身也是正在学写代码的萌新,这个不一定就是你遇到的那几个错误的问题,不过我这边写完的感觉就是无论是窗口Window,场景Scene,都要自己把类重写一下,要不然会各种问题的。
若有前辈指导发现我这边也有问题(笑)的话,你还是听人家的=w=
|