Project1

标题: 菜单光标矩形的调整 [打印本页]

作者: 轩辕合流    时间: 2023-11-3 09:36
标题: 菜单光标矩形的调整
【有事请教】

        作为一个刚从RPGXP转过来到MV的新手:
       
                慢慢摸索到一些东西。在这个地方实在是卡住了!!!

                这个光标没有找到哪里可以调整,就是想请问一下大家有没有像RGSS1那种刷新光标矩形的函数




作者: 泼墨漓江    时间: 2023-11-3 17:33
主MZ的,MV这块可能有出入,说下可能的原因。

Window的itemHeight()函数返回值可能给得太低了,而后drawItem()没有参考itemRect()返回的区域,画到了超出范围的位置。

于是光标只有1/2单个角色绘制区域的高度。如果是这样,直接修改itemHeight()即可。

不确定的是,如果只是itemHeight()给太小了,按照规范绘制实际会出现下面的角色信息叠在上面的角色信息上一部分的情况,这里却没有。

怀疑是也没有用drawItem(),直接重写了refresh,然后给四个角色手动按想象中的绘制区域进行了绘制,如果这个情况那就还是用drawItem()的方法去绘制即可。

要修改行高,重写itemHeight(),要修改列数,重写maxCol()。在drawItem(index)中使用itemRect(index)获取提供好的绘制区域,在区域内进行绘制。如果需要带内边距以更美观,使用lineRect(index)获取减去内边距之后的绘制区域。

作者: 轩辕合流    时间: 2023-11-7 00:18
泼墨漓江 发表于 2023-11-3 17:33
主MZ的,MV这块可能有出入,说下可能的原因。

Window的itemHeight()函数返回值可能给得太低了,而后drawIt ...

在自己的折腾下算是解决了,但是不是最优最好的解法目前不得知。
就是把 Window_Selectable 的 itemRect 复制过来了
  1. // 刷新光标矩形
  2. Window_MenuStatus.prototype.itemRect = function (index) {
  3.     var rect = new Rectangle();
  4.     var maxCols = this.maxCols();
  5.     rect.width = this.itemWidth();
  6.     rect.height = 48 * 3 + 2;
  7.     rect.x = index % maxCols * (rect.width + 6);
  8.     rect.y = Math.floor(index / maxCols) * (48 * 3 + 10);// - this._scrollY;
  9.     return rect;
  10. };
复制代码

关于maxCol() 早就按照自己对在RGSS1的时候熟练运用
  1. // 等同于RPGXP 的@column_max = 2
  2. Window_MenuStatus.prototype.maxCols = function () {
  3.     // 设定横排数量
  4.     return 2;
  5. };
复制代码

个人感觉是这样:等同于RPGXP 的@column_max = 2

                     最后谢谢大佬的回答,在对JS一穷二白的情况下瞎折腾还是伤脑筋




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1