查看: 1637|回复: 0

[交流讨论] (小白向)关于mv中选项行间距修改的方法

[复制链接]
梦石
0
星屑
4061
在线时间
191 小时
注册时间
2022-4-24
回帖
20
发表于 2023-5-11 17:20:28 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 yooz 于 2023-5-11 17:21 编辑

此文档为简单修改行间距的方法,技术力有限,示例数据有一定局限性,仅供参考。

全局修改

(修改代码正常情况下位于rpg_windows.js文件中第858行~第866行间)
原始代码:
Window_Selectable.prototype.itemRect = function(index) {
    var rect = new Rectangle();
    var maxCols = this.maxCols();
    rect.width = this.itemWidth();
    rect.height = this.itemHeight();
    rect.x = index % maxCols * (rect.width + this.spacing()) - this._scrollX;
    rect.y = Math.floor(index / maxCols) * rect.height - this._scrollY;
    return rect;
};

修改后代码:
Window_Selectable.prototype.itemRect = function(index) {
    var rect = new Rectangle();
    var maxCols = this.maxCols();
    rect.width = this.itemWidth();
    rect.height = this.itemHeight();
    rect.x = index % maxCols * (rect.width + this.spacing()) - this._scrollX;
    rect.y = Math.floor(index / maxCols) * rect.height - this._scrollY + index*32;
    return rect;
};


关键点:rect这个对象是用来存储成对出现的参数,比如,一个矩形框的左上角xy坐标、宽度和高度等,这里主要修改的地方是rect.y,即以改变目标的坐标y值,达到增加行间距的效果;因为行间距要求两行间具备间隔,每行的y坐标增值应该不一样,故使用index*变量(即 索引值(对小白ps:列表里第n个,索引值是n-1)*变量),但index*变量仅适用于单列列表,如果列表有多列,请自行研究修改数据,顺便列表列数是这里的maxCols。

备注:全局修改的情况下,光标的坐标y值也被调整,故不需要调整光标相关代码。

背包道具栏修改(方法也适用于其他列表)

(修改代码正常情况下位于rpg_windows.js文件中第1983行~第1994行间
原始代码:
Window_ItemList.prototype.drawItem = function(index) {
    var item = this._data[index];
    if (item) {
        var numberWidth = this.numberWidth();
        var rect = this.itemRect(index);
        rect.width -= this.textPadding();
        this.changePaintOpacity(this.isEnabled(item));
        this.drawItemName(item, rect.x, rect.y, rect.width - numberWidth);
        this.drawItemNumber(item, rect.x, rect.y, rect.width);
        this.changePaintOpacity(1);
    }
};



修改后代码:
Window_ItemList.prototype.drawItem = function(index) {
    var item = this._data[index];
    if (item) {
        var numberWidth = this.numberWidth();
        var rect = this.itemRect(index);
        rect.width -= this.textPadding();
        this.changePaintOpacity(this.isEnabled(item));
//修改处
        this.drawItemName(item, rect.x, rect.y + index*32, rect.width - numberWidth);
        this.drawItemNumber(item, rect.x, rect.y + index*32, rect.width);
        this.changePaintOpacity(1);
    }
};


关键点:①还是rect,这里的“var rect = this.itemRect(index)”创建对象引用了全局修改时代码里rect的参数,也就是说,这里的参数修改是在全局修改后的基础上进行的,如果你没有进行全局修改则是在默认参数的基础上修改;②这里主要修改处是rect.y,在后面添加index*变量即可,理由和全局修改时一样,同样具有仅适用于单列列表的局限性,若列表为多列,请自行研究需修改的参数数据。

PS:关于如何把背包列表改为单列(也适用于其他部分列表)
(修改代码正常情况下位于rpg_windows.js文件中第1925行~第1927行间)

原始代码:
Window_ItemList.prototype.maxCols = function() {
    return 2;
};



修改后代码:
Window_ItemList.prototype.maxCols = function() {
    return 1;
};


关键点:没啥关键点,return后面的数字就是背包的道具列表列数。

PPS:若使用了有关插件,可能导致行间距的修改被插件覆盖修正,若有类似情况,请修改有关插件中的代码,具体修改方法类似上文,代码位置可以查找关键词“rect”寻找锁定(有很多个函数都有rect,你要改的话请先确保自己认识哪个是你要改的函数,若是不会请别乱改,如有意外概不负责)。

PPPS:再次强调“index*变量”这一数据仅适用于单列列表,以防有小笨蛋没看见。

——补充:光标坐标修改——

补充代码:
Window_ItemList.prototype.updateCursor = function() {
    if (this._cursorAll) {
        var allRowsHeight = this.maxRows() * this.itemHeight();
        this.setCursorRect(0, 0, this.contents.width, allRowsHeight);
        this.setTopRow(0);
    } else if (this.isCursorVisible()) {
        var index = this.index();
        var rect = this.itemRect(this.index());
        this.setCursorRect(rect.x, rect.y+index*32, rect.width, rect.height);
    } else {
        this.setCursorRect(0, 0, 0, 0);
    }
};
(添加至rpg_windows.js文件中 第1933行 附近,原理适用于其他列表,但是代码只可用于道具列表)
关键点:
①老朋友rect,在rect.y后面增加你在局部修改时使用的参数数据就行,例如前面修改背包使用的是“index*变量”,这里也加上“index*变量”,其他参数数据同理;
②如果你会看代码,往上翻一下,是能注意到原始的代码里是没有“index”的,所以这里用“var index = this.index();”创建了一个index,如果你修改的参数数据里也有缺失对象的情况,请记得创建;
③如果要使用这个方法修改其他列表,请修改这一部分“Window_ItemList.prototype.updateCursor = function() {”开头的“Window_ItemList”,并将代码放到合适且正确的位置。


为方便交流学习,我会把自己写的教学文档放在下方,文档内容和帖子内容完全一样,有需要的可以额外下载。
关于rmmv行间距修改.zip (16.42 KB, 下载次数: 5, 售价: 1 星屑)


评分

参与人数 2赞 +2 收起 理由
马铃薯条 + 1 感谢分享
小怪兽奇奇侠 + 1 好!

查看全部评分

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部