古树旋律 发表于 2023-4-13 09:56:29

创建窗口代码示例

一些RM作者常见的问题:“如何在画面中显示某某某变量或者文字”。
当然啦,这种需求很大的问题,已经有很多相关的插件了。但这种拿来主义终究不是自己的知识产出,不知其所以然,游戏终究还是一个大众化的缝合怪。
创建窗口的方式有很多,条条大路通罗马。在此分享一个自己创建窗口的步骤方法。以RMMZ为例:
//==========================================
//0.插件的信息部分
//==========================================
/*:
* @target MZ
* @plugindesc 创建窗口实作
* @author 古树旋律
*
* @help
* 1.复制初始化部分
* 2.书写要更新的部分,里面添加展示的内容
* 3.添加更新并启用
* 4.设置窗口的位置和尺寸
* 5.创建调用函数
* 6.复写需要调用窗口的场景
*/

//==========================================
//1.初始化部分
//==========================================
function Window_DIYWindow() {
    this.initialize(...arguments);
}
Window_DIYWindow.prototype = Object.create(Window_Base.prototype);
Window_DIYWindow.prototype.constructor = Window_DIYWindow;
Window_DIYWindow.prototype.initialize = function (rect) {
    Window_Base.prototype.initialize.call(this, rect);
    this.opacity = 0;
    this.refresh();//刷新调用
};

//==========================================
//2.更新部分,里面添加展示的内容
//==========================================
Window_DIYWindow.prototype.refresh = function () {
    this.contents.clear();//清除旧内容
    const date = new Date();
    this.contents.fontSize = 28;//字体大小
    this.drawText(date, 0, 0, 750, 'left');//展示
        //括号内为(内容,X坐标,Y坐标,内容宽度,对齐方式)
};

//==========================================
//3.添加更新并启用
//==========================================
Window_DIYWindow.prototype.update = function () {
    Window_Base.prototype.update.call(this);
    this.refresh();
};

//==========================================
//4.设置窗口的位置和尺寸
//==========================================
Scene_Base.prototype.DIYWindowRect = function () {
    const wx = 0;
    const wy = 0;
        const ww = 750;
    const wh = 200;
    return new Rectangle(wx, wy, ww, wh);
        //括号内为(X坐标、Y坐标、窗体宽度、窗体高度)
};

//==========================================
//5.创建调用函数
//==========================================
Scene_Base.prototype.createDIYWindow = function () {
    const rect = this.DIYWindowRect();
    this._DIYWindow = new Window_DIYWindow(rect);
    this.addChild(this._DIYWindow);
};

//==========================================
//6.复写需要调用的场景
//==========================================
var _Scene_Map_createAllWindows = Scene_Map.prototype.createAllWindows;
Scene_Map.prototype.createAllWindows = function () {
    _Scene_Map_createAllWindows.call(this);
    this.createDIYWindow();
};


最终效果如图所示,在Map中创建了一个窗口,窗口显示了Date内容。这个Date()是js的内置函数,大家可以自行修改成别的文字或者变量。
需要注意的是,创建窗口涉及到了各个函数之间的调用,如果函数名称错误,则会报错。

古树旋律 发表于 2023-4-13 10:28:17



图示能更直观一些,保持对应的函数调用一致
页: [1]
查看完整版本: 创建窗口代码示例