快捷导航
查看: 306|回复: 2

[脚本] 创建窗口代码示例

[复制链接]
会员等级

积分信息
金币:733
金钱:0
元宝:20
活跃:187
发电:0

荣誉勋章
热心会员优秀版主首批会员最佳新人

TA的角色
UID: 6 发表于 2023-4-13 09:56:29 | 显示全部楼层 |阅读模式
一些RM作者常见的问题:“如何在画面中显示某某某变量或者文字”。
当然啦,这种需求很大的问题,已经有很多相关的插件了。但这种拿来主义终究不是自己的知识产出,不知其所以然,游戏终究还是一个大众化的缝合怪。
创建窗口的方式有很多,条条大路通罗马。在此分享一个自己创建窗口的步骤方法。以RMMZ为例:
[JavaScript] 纯文本查看 复制代码
//==========================================
//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();
};

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

评分

参与人数 1金币 +15 活跃 +15 收起 理由
Admin + 15 + 15 666666

查看全部评分

最近访客

  • Ansel
    2024-11-21
回复 论坛版权

使用道具 举报

会员等级

积分信息
金币:733
金钱:0
元宝:20
活跃:187
发电:0

荣誉勋章
热心会员优秀版主首批会员最佳新人

TA的角色
 楼主| 发表于 2023-4-13 10:28:17 | 显示全部楼层
1.PNG

图示能更直观一些,保持对应的函数调用一致
回复

使用道具 举报

文明发言,和谐互动
文明发言,和谐互动
您需要登录后才可以回帖 登录 | 加入民族

本版积分规则

论坛用工具

蓝凑云 hello图床 聚合图床 TinyPNG remove 代码测试 颜色代码 颜色代码2

Powered by Discuz!

© 2001-2013 Comsenz Inc.

实用工具

AI人工智能图片放大 图片无损放大 Deepl翻译器 百宝箱 孟坤工具箱 在线压缩图片 图片切圆角

您一共访问了本站 加载中...

Archiver|小黑屋|RPG民族

GMT+8, 2024-11-21 21:33 , Processed in 0.170811 second(s), 53 queries .

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