设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 3097|回复: 6
打印 上一主题 下一主题

[已经解决] CP制技能的菜单窗口尺寸不对……

[复制链接]

Lv2.观梦者

梦石
0
星屑
836
在线时间
159 小时
注册时间
2012-6-3
帖子
124
跳转到指定楼层
1
发表于 2017-5-15 23:47:12 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x

如图,这是一个让技能可以装卸的脚本
但是实际使用的时候发现窗口有问题,最下面一行本来应该显示全部的技能
就像换装备的时候,下面应该显示包裹里面能使用的装备一样
但是现在窗口尺寸明显出问题了……太小了,一行字都显示不出来……
试了一下,换技能只能靠猜的……
只能麻烦dalao帮忙调一下了 ……
原脚本

Lv5.捕梦者 (版主)

梦石
1
星屑
23994
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

2
发表于 2017-5-16 11:08:41 | 只看该作者
  1. Scene_SkillEquip.prototype.create = function() {
  2.         Scene_MenuBase.prototype.create.call(this);
  3.         this.createHelpWindow();
  4.         this.createStatusWindow();
  5.         this.createCPWindow();
  6.         this.createSlotWindow();
  7.         this.createItemWindow();
  8.         this.refreshActor();
  9.     };
复制代码


以及下面的 5 个函数里定义了窗口位置和大小。
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
836
在线时间
159 小时
注册时间
2012-6-3
帖子
124
3
 楼主| 发表于 2017-5-16 23:34:39 | 只看该作者
guoxiaomi 发表于 2017-5-16 11:08
以及下面的 5 个函数里定义了窗口位置和大小。

实,实在是看不懂……里面要是有两个数字我还能瞎猜改一改,全是字母……
麻烦讲得再简单直接一点……
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23994
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

4
发表于 2017-5-17 10:35:25 | 只看该作者
我添一些注释,你应该就能看懂了。首先在这个 Scene_SkillEquip 被创建时,会执行 initialize 方法。这里继承了 Scene_MenuBase 的同名方法。
虽然这里没有写,但是 Scene_MenuBase 的同名方法里肯定调用了 create 方法。所以需要定义 Scene_SkillEquip 的 create 方法,在此方法中除了继承 Scene_MenuBase 的 create 方法外,还调用了自身的另外 6 个方法。

JAVASCRIPT 代码复制
  1.     //////////////////////////////////////////////////////////////////////////////////
  2.    
  3.     Scene_SkillEquip.prototype = Object.create(Scene_MenuBase.prototype);
  4.     Scene_SkillEquip.prototype.constructor = Scene_SkillEquip;
  5.  
  6.     Scene_SkillEquip.prototype.initialize = function() {
  7.         Scene_MenuBase.prototype.initialize.call(this);
  8.     };
  9.  
  10.     Scene_SkillEquip.prototype.create = function() {
  11.         Scene_MenuBase.prototype.create.call(this); // super
  12.         this.createHelpWindow(); // 创建 HelpWindow
  13.         this.createStatusWindow(); // 创建 StatusWindow
  14.         this.createCPWindow(); // 创建 CPWindow
  15.         this.createSlotWindow(); // 创建 SlotWindow
  16.         this.createItemWindow(); // 创建 ItemWindow
  17.         this.refreshActor(); // 刷新角色(与 Window 无关)
  18.     };
  19.  
  20. //--------------------------------------------------------------------------------------
  21. // 创建 HelpWindow
  22. //--------------------------------------------------------------------------------------
  23.     Scene_SkillEquip.prototype.createStatusWindow = function() {
  24.         this._statusWindow = new Window_EquipStatus(0, this._helpWindow.height);
  25.         // StatusWindow 是 Window_EquipStatus 的实例(对象),创建时输入的参数是x,y坐标 x = 0 和 y = this._helpWindow.height
  26.         // 这里要注意,createHelpWindow() 方法应该是 Scene_MenuBase 自带的,去那里找 HelpWindow 的默认高度
  27.         // 看了一下 rpg_window.js 这个高度比较难算,由具体的内容决定
  28.         // Window_EquipStatus 对象的宽是固定的 w = 312,参见原脚本 rpg_window.js 2259 行
  29.         // Window_EquipStatus 对象的高请看 2263 行,由内容决定。后面的大部分窗口高度都是同样的由内容决定。
  30.         this.addWindow(this._statusWindow);
  31.     };
  32.  
  33. //--------------------------------------------------------------------------------------
  34. // 创建 CPWindow
  35. //--------------------------------------------------------------------------------------   
  36.     Scene_SkillEquip.prototype.createCPWindow = function() {
  37.         var wx = this._statusWindow.width; // CPWindow 的 x = StatusWindow 的宽,也就是说 CPWindow 左边紧靠着 StatusWindow 的右边
  38.         var wy = this._helpWindow.height; // CPWindow 的 y = HelpWindow 的高,也就是说 CPWindow 上面紧靠着 HelpWindow 的下边
  39.         var ww = Graphics.boxWidth - this._statusWindow.width; // CPWindow 的 w = 画面大小 - StatusWindow 的宽,也就是说 CPWindow 右边紧靠着画面最右边
  40.         this._cpWindow = new Window_CP(wx, wy, ww); // 把 x y w 三个参数输入进去,注意到这里没有高度,高度是由 CPWindow 的内容决定
  41.         this.addWindow(this._cpWindow);
  42.         if (simpleMode) this._cpWindow.hide();
  43.     };
  44. //--------------------------------------------------------------------------------------
  45. // 创建 SlotWindow
  46. //--------------------------------------------------------------------------------------   
  47.     Scene_SkillEquip.prototype.createSlotWindow = function() {
  48.         var wx = this._statusWindow.width; // SlotWindow 的 x = StatusWindow 的宽,也就是说 SlotWindow 左边紧靠着 StatusWindow 的右边
  49.         var wy = this._helpWindow.height; // SlotWindow 的 y = HelpWindow 的高,也就是说 SlotWindow 上面紧靠着 HelpWindow 的下边
  50.         var ww = Graphics.boxWidth - this._statusWindow.width; // SlotWindow 的 w = 画面大小 - StatusWindow 的宽,也就是说 SlotWindow 右边紧靠着画面最右边
  51.         var wh = this._statusWindow.height; // SlotWindow 的 h = StatusWindow 的高度
  52.         if (!simpleMode) { // 在 非 simpleMode 的情况下,位置有所调整
  53.             wy += this._cpWindow.height;
  54.             wh -= this._cpWindow.height;
  55.         }
  56.         this._slotWindow = new Window_SlotCP(wx, wy, ww, wh);
  57.         this._slotWindow.setHelpWindow(this._helpWindow);
  58.         this._slotWindow.setStatusWindow(this._statusWindow);
  59.         this._slotWindow.setHandler('ok',       this.onSlotOk.bind(this));
  60.         this._slotWindow.setHandler('cancel',   this.popScene.bind(this));
  61.         this._slotWindow.setHandler('pagedown', this.nextActor.bind(this));
  62.         this._slotWindow.setHandler('pageup',   this.previousActor.bind(this));
  63.         this.addWindow(this._slotWindow);
  64.         this._slotWindow.activate();
  65.         this._slotWindow.select(0);
  66.     };
  67. //--------------------------------------------------------------------------------------
  68. // 创建 ItemWindow
  69. //-------------------------------------------------------------------------------------- 
  70.     Scene_SkillEquip.prototype.createItemWindow = function() {
  71.         var wx = 0; // x = 0,窗口靠左边
  72.         var wy = this._statusWindow.y + this._statusWindow.height; // y 坐标,窗口上边靠StatusWindow 的下边
  73.         var ww = Graphics.boxWidth; // w 宽度,窗口宽度等于画面宽度
  74.         var wh = Graphics.boxHeight - wy; // h 高度,窗口下边靠着画面下边
  75.         this._itemWindow = new Window_SkillCP(wx, wy, ww, wh);
  76.         this._itemWindow.setHelpWindow(this._helpWindow);
  77.         this._itemWindow.setStatusWindow(this._statusWindow);
  78.         this._itemWindow.setHandler('ok',     this.onItemOk.bind(this));
  79.         this._itemWindow.setHandler('cancel', this.onItemCancel.bind(this));
  80.         this._slotWindow.setItemWindow(this._itemWindow);
  81.         this._itemWindow.setSlotWindow(this._slotWindow);
  82.         this.addWindow(this._itemWindow);
  83.     };


这样就说清楚了吧。因为你的 StatusWindow 里的内容过多,导致 ItemWindow 被压下去了。虽然看上去没有那么多,但是可能有不显示的项目被一起算进去了。
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
836
在线时间
159 小时
注册时间
2012-6-3
帖子
124
5
 楼主| 发表于 2017-5-18 21:03:55 | 只看该作者
guoxiaomi 发表于 2017-5-17 10:35
我添一些注释,你应该就能看懂了。首先在这个 Scene_SkillEquip 被创建时,会执行 initialize 方法。这里继 ...

终于搞定了……非常感谢
虽然明白您授之鱼不如授之于渔的心情,其实我一开始只是想要成品的
不过机会难得,而且都写了这么详细的注释了……
我一开始想修改 StatusWindow 的,不过那要修改游戏原本的 StatusWindow 设置,影响到人物状态了
后来想试试修改脚本里面的 StatusWindow ,不让它直接调用游戏本身的,只显示数据就行了……然而力有未逮,试了好久都搞不定……

还好注释写的非常详细,我想了想,既然没办法缩小 StatusWindow,那就直接拉大itemWindow好了

Scene_SkillEquip.prototype.createItemWindow = function() {
        var wx = 0;
        var wy = 450;
        var ww = Graphics.boxWidth;
        var wh = Graphics.boxHeight - wy;


不过这样已装备的技能那个窗口下半部分就会被覆盖掉了
所以又缩小了cpWindow
Scene_SkillEquip.prototype.createSlotWindow = function() {
        var wx = this._statusWindow.width;
        var wy = this._helpWindow.height;
        var ww = Graphics.boxWidth - this._statusWindow.width;
        var wh = this._statusWindow.height-125;

当然,都是用的笨办法,直接改尺寸和坐标,硬试了几个数字,找了个看上去最舒服的
cpWindow那边我试过了,如果数量超过窗口尺寸,会显示出下拉箭头
至于StatusWindow下半部分被遮住的……天生也不显示东西,遮住就遮住吧


另外,解决完这个问题,我编辑了回复,然后回头最后测试一遍游戏……发现了窗口尺寸不对的源头……
我用了一个拓展装备栏的脚本,那个脚本会拉长装备和状态栏窗口……拉得太长就会这样了……

点评

这个原因,我回复的最后一句已经提到了。  发表于 2017-5-19 02:15
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-16 05:08

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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