在一个我们研究了添加到窗体方法的选择,这个问题来研究窗体类的细节。

所有形式的父类的 Window_Base 四个参数需要初始化。

  #--------------------------------------------------------------------------# ● 初始化对象#--------------------------------------------------------------------------def initialize(x, y, width, height)superself.windowskin = Cache.system("Window")update_paddingupdate_tonecreate_contents@opening = @closing = falseend

这四个參数表示窗体左上角的横纵坐标以及窗体的宽度与高度。

Window_Base 中还提供了绘制窗体的一整套方法。

比方说绘制文本(draw_text)、 绘制值槽(draw_gauge)、绘制图标(draw_icon)、绘制角色肖像图(draw_face)等等。

Window_Selectable 是拥有光标移动、滚动功能的窗体的父类。

当中定义了一些获得窗体中的绘制项目所需信息的方法。

比方获取列数(col_max)、获取行间距的宽度(spacing)、获取项目的宽度(item_width)等等。

Window_Selectable 类中还定义了处理光标在项目中移动以及选择的方法。

比方处理光标的移动(process_cursor_move)、“确定”和“取消”的处理(process_handling)等等。

Window_Command 的用法上一期已经讲过了。它另一个子类。Window_HorzCommand 表示能够横向选择的指令窗体。

仅仅要是继承自 Window_HorzCommand 的指令装口就是横向选择的。

我们发现尽管指令窗体能够横向选择,可是 Window_Selectable 的子类却仅仅能纵向选择。

所以如今參照 Window_HorzCommand 写一个 Window_HorzSelectable 来处理横向选择的窗体。

#encoding:utf-8
#==============================================================================
# ■ Window_HorzSelectable
#------------------------------------------------------------------------------
#  拥有横向光标移动、滚动功能的窗体
#==============================================================================class Window_HorzSelectable < Window_Selectable

横向与纵向的窗体差别有:

纵向窗体使用上下键切换选项;横向窗体使用左右键切换选项。

选项数量超过一页能显示的最大数量时。纵向窗体的上下边界会有三角箭头,而横向窗体的左右边界有三角箭头。

纵向窗体的选项是从起点向下绘制的;横向窗体的选项是从起点向右绘制的。

參考 Window_HorzCommand  将 Window_Selectable 中与以上三种差别有关的方法挑选出来在 Window_HorzSelectable 中重写。

  #--------------------------------------------------------------------------# ● 获取列数#--------------------------------------------------------------------------def col_maxreturn 4end#--------------------------------------------------------------------------# ● 获取行间距的宽度#--------------------------------------------------------------------------def spacingreturn 8end#--------------------------------------------------------------------------# ● 获取首列位置#--------------------------------------------------------------------------def top_colox / (item_width + spacing)end#--------------------------------------------------------------------------# ● 设置首列位置#--------------------------------------------------------------------------def top_col=(col)col = 0 if col < 0col = col_max - 1 if col > col_max - 1self.ox = col * (item_width + spacing)end#--------------------------------------------------------------------------# ● 获取尾列位置#--------------------------------------------------------------------------def bottom_coltop_col + col_max - 1end#--------------------------------------------------------------------------# ● 设置尾列位置#--------------------------------------------------------------------------def bottom_col=(col)self.top_col = col - (col_max - 1)end#--------------------------------------------------------------------------# ● 确保光标在画面范围内滚动#--------------------------------------------------------------------------def ensure_cursor_visibleself.top_col = index if index < top_colself.bottom_col = index if index > bottom_colend#--------------------------------------------------------------------------# ● 计算窗体内容的宽度#--------------------------------------------------------------------------def contents_width(item_width + spacing) * item_max - spacingend#--------------------------------------------------------------------------# ● 计算窗体内容的高度#--------------------------------------------------------------------------def contents_heightitem_heightend#--------------------------------------------------------------------------# ● 获取项目的绘制矩形#--------------------------------------------------------------------------def item_rect(index)rect = superrect.x = index * (item_width + spacing)rect.y = 0rectend#--------------------------------------------------------------------------# ● 光标向下移动#--------------------------------------------------------------------------def cursor_down(wrap = false)end#--------------------------------------------------------------------------# ● 光标向上移动#--------------------------------------------------------------------------def cursor_up(wrap = false)end#--------------------------------------------------------------------------# ● 光标移至下一页#--------------------------------------------------------------------------def cursor_pagedownend#--------------------------------------------------------------------------# ● 光标移至上一页#--------------------------------------------------------------------------def cursor_pageupendend

尽管 Window_Selectable 默认的是纵向选择的窗体,可是实际上当中定义了上下左右四个键的行为,并用 row_max 与 col_max 方法来控制行数与列数, 仅仅要改变这两个值就能够将它扩展为n*m的随意选择的窗体。

index 是用来表示选项编号的变量,它能够通过非常easy的公式与选项的行列号进行换算。

col = inex % col_max、row = index / col_max

这里我们设置一行最多4列,当索引超出当前的4列时。就须要 ensure_cursor_visible 方法来改变首列和尾列。使光标在画面范围内滚动。

top_col=(col) 等方法事实上非常坑,重载的=操作符改变了參数index的值。这不符合常理。

最后我们用空的方法替换了光标上下移动以及翻页的方法。这样就仅仅能用左右键来切换选项了。

最后来把游戏菜单画面改为横向吧。

这是默认的菜单画面:

Scene_Menu 中有三个窗体,排除金币窗体,菜单画面中显示指令的窗体与显示队伍成员状态的窗体都能够改为横向。

Window_MenuCommand 继承自 Window_Command。如今把它的父类改为 Window_HorzCommand。

然后改动一下 Window_MenuCommand 的窗体大小。

  #--------------------------------------------------------------------------# ● 获取列数#--------------------------------------------------------------------------def col_maxreturn 7end#--------------------------------------------------------------------------# ● 获取窗体的高度#--------------------------------------------------------------------------def window_heightreturn 48end#--------------------------------------------------------------------------# ● 获取窗体的宽度#--------------------------------------------------------------------------def window_widthreturn Graphics.widthend

将窗体宽度改为与游戏窗体的宽度同样,高度为48,考虑到共同拥有7个选项。将最大列数设为7。

Window_MenuStatus 原本是 Window_Selectable 的子类。如今它的父类改为 Window_HorzSelectable。

接下来还是改动窗体的宽度与高度。

  #--------------------------------------------------------------------------# ● 获取窗体的宽度#--------------------------------------------------------------------------def window_widthGraphics.widthend#--------------------------------------------------------------------------# ● 获取窗体的高度#--------------------------------------------------------------------------def window_heightGraphics.height - 96end

尽管 Window_MenuStatus 的大小正确了,可是它的起点不正确。

在 Scene_Menu 把窗体的起始坐标初始化成正确的值。

  #--------------------------------------------------------------------------# ● 生成状态窗体#--------------------------------------------------------------------------def create_status_window@status_window = Window_MenuStatus.new(0, 48)end

如今总体窗体框架已经正确。可是状态窗体中角色属性的绘制还没有变。

  #--------------------------------------------------------------------------# ● 绘制项目#--------------------------------------------------------------------------def draw_item(index)actor = $game_party.members[index]enabled = $game_party.battle_members.include?(actor)rect = item_rect(index)draw_item_background(index)draw_actor_face(actor, rect.x, rect.y, enabled)draw_actor_name(actor,rect.x, rect.y+96)draw_actor_class(actor,rect.x, rect.y+96+line_height*1)draw_actor_icons(actor,rect.x,rect.y+96+line_height*2)draw_actor_level(actor,rect.x, rect.y+96+line_height*2)draw_actor_hp(actor,rect.x, rect.y+96+line_height*3)draw_actor_mp(actor,rect.x,rect.y+96+line_height*4)draw_actor_tp(actor,rect.x,rect.y+96+line_height*5)end

用 Window_Base 中提供的工具绘制角色的属性。

最后调整一些细节參数。

终于成品:

版权声明:本文博主原创文章,博客,未经同意不得转载。

如何出色的研究 RGSS3 (三) 形式的调整的细节相关推荐

  1. 如何优雅的研究 RGSS3 (三) 调整窗口的细节

    在上一期我们研究了向窗口中添加选项的方法,本期就来研究一下窗口类的具体细节. 所有窗口的父类 Window_Base 初始化时需要四个参数. #---------------------------- ...

  2. 基于芯科Host-NCP解决方案的Zigbee 3.0 Gateway技术研究(三)-移植到ESP32平台(1)

    相关系列文章 基于芯科Host-NCP解决方案的Zigbee 3.0 Gateway技术研究(-)-Z3GatewayHost应用搭建 基于芯科Host-NCP解决方案的Zigbee 3.0 Gate ...

  3. 欧盟正研究用三种标准技术应对DNS漏洞

    欧洲网网络与信息安全局(ENISA)正在研究用三种不同方法增强网络地址系统的安全,应对最近发现的互联网域名系统中的安全漏洞. 互联网域名系统中的安全漏洞是研究人员Dan Kaminsky首先发现了.这 ...

  4. 18650圆柱锂电池comsol5.6模型 参数已配置,电化学生热研究,三种放电倍率,

    18650圆柱锂电池comsol5.6模型 参数已配置,电化学生热研究,三种放电倍率,参数化扫描,各种结果图都有 YID:2826643134113047蠢妲己的师傅

  5. 18650圆柱锂电池comsol5.6模型 参数已配置,电化学生热研究,三种放电倍率

    18650圆柱锂电池comsol5.6模型 参数已配置,电化学生热研究,三种放电倍率,参数化扫描,各种结果图都有 YID:2826643134113047蠢妲己的师傅

  6. 极验滑块验证码破解与研究(三):滑块缺口识别

    极验滑块验证码破解与研究(三):滑块缺口识别 声明 一.环境安装 1. 第三方库安装 二.滑块缺口识别 1. 准备工作 2. 工具函数说明 3. 接口识别原理讲解 4. 缺口识别完整代码 三.结语 * ...

  7. Qt 3D的研究(三):显示3D模型

    原文地址::https://blog.csdn.net/gamesdev/article/details/43964499 相关文章 1.Qt之实现3D纹理渲染自由旋转空间立方体----https:/ ...

  8. 中国移动飞信的研究 笔记三

    中国移动飞信的研究 笔记三 最近项目比较忙,自己的事情都没有时间做了. 今天只是研究了一点点 飞信.对于飞信来说,入口所在的命名空间是 : Imps.Client.PC. 既然这样我们就将此 命名空间 ...

  9. 阴影映射(Shadow Map)的研究(三)

    阴影映射(Shadow Map)的研究(三) 最近为了自己制作的项目可是吃了不少苦头,这其中关键的一点就是想要实现阴影映射(Shadow Map).为了实现目标,我参考了网络上很多相关的资料,也看了一 ...

最新文章

  1. Win10-OpenCV双目相机开发
  2. Java虚拟机工作原理
  3. 恢复后缀phobos勒索病毒 解密成功 百分百恢复sql文件
  4. 微型计算机硬件的最小配置包括,职中计算机应用基础第一章测试题及答案
  5. 【Luogu P2781】 传教
  6. mysql 清理 reley_MySQL日志相关
  7. 【MySQL5.7版本单节点大数据量迁移到PXC8.0版本集群全记】
  8. python 实现SOM: 函数更新
  9. 2. wordpress 友情链接的备份和导入
  10. html调用js函数取随机返回数值并自动显示在html页面
  11. FlashFXP 便携版,U盘版,真正绿色
  12. thinkphp5+php微信公众号二维码扫码关注推广二维码事件实现
  13. 云班课在计算机,云班课电脑版
  14. 语音芯片排行榜,为何唯创知音WT588F语音芯片如此受欢迎
  15. 亚马逊英国站小风扇UKCA认证办理流程
  16. 原来Python自带了数据库,用起来真方便
  17. pycharm 【Debug】过程卡住不动
  18. ios13全选手势_iOS13操作新手势:使用iPhone编辑文本更方便
  19. 2020 China Collegiate Programming Contest Weihai Site H.Message Bomb
  20. 阿里,腾讯,百度,美团,头条等技术面试题目

热门文章

  1. 如何在Win7以上环境使用VC++6
  2. C# SharpMap 学习总结
  3. 洛谷P4016 负载平衡问题
  4. python学习笔记day08 文件功能详解
  5. Luogu P1160 【队列安排】
  6. jQuery中的DatePicker今天按钮不起作用
  7. window7 telnet localhost 5554
  8. linux cat 命令详解
  9. java biginteger使用_java中的BigInteger的基本用法 | 学步园
  10. oracle适配器接口,Oracle