注册会员 登录
Project1 返回首页

亿万星辰的深邃空间 https://rpg.blue/?62841 [收藏] [复制] [分享] [RSS]

日志

RGSS窗口类Window详解(三)

已有 396 次阅读2011-9-13 20:44 |个人分类:坑爹的RGSS教程

前两讲我们介绍了静态窗口Window_Base的相关知识,这一讲,我们开始学习动态窗口Window_Command(Window_Selectable)的相关知识。

所谓动态窗口,其实就是有选择项出现的窗口,比如默认系统中的物品菜单等等,从根本的源头讲,这些菜单也是有静态窗口类Window_Base而来的,不过为了方便大家的使用,RGSS中专门为这类窗口预先定义好了类。下面就开始向大家介绍最简单的动态窗口的写法。

这里我们举两个例子,首先是一个Window_Command类的例子,就是我们默认游戏的标题菜单。

我们在标题场景Scene_Title类中可以看到,关于命令窗口的建立,简单的不能再简单,一共就7行。

 s1 = "新游戏"
 s2 = "继续"
 s3 = "退出"
 @command_window = Window_Command.new(192, [s1, s2, s3])
 @command_window.back_opacity = 160
 @command_window.x = 320 - @command_window.width / 2
 @command_window.y = 288

我们来逐步分析。

 s1 = "新游戏"
 s2 = "继续"
 s3 = "退出"

先看s1、s2、s3这三个变量,很明显的,里面是我们见到的标题菜单中的三个选项,如果你想让你的标题菜单变成其他的文字,比如“初入江湖”“归隐江湖”“退隐江湖”,只需要把s1、s2、s3做对应的修改即可。



 @command_window = Window_Command.new(192, [s1, s2, s3])

这行直接负责创建整个窗口,执行了这句,窗口便已经出来了。它的参数有两个,注意,不是四个,后面的s1、s2、s3注意看使用中括号括住的,这个形式叫做数组。所以整个Window_Command的初始化函数有两个参数,第一个是窗口的宽度,第二个则是对应的选择项内容。那么现在是三个选项,想变得多一点是不是只需要往那个数组里多填写一些元素就可以了呢?没错,你可以直接在s3的后面加上“, "新选项"”,然后在测试游戏看看标题菜单是不是多了一个新的选项。但是有个问题,鼠标移动到这个“新选项”上按回车,没反应,这个要在后面的部分追加代码才会有功能,先放下,我们以后会说。
另外要说的是,这行我们把我们新创建的窗口命名为“@command_window”,这样在后面的部分,我们就可以直接用它的名字来对它进行相关的设定了。



 @command_window.back_opacity = 160

这行虽然我们没有见过,但是可以根据字面意思猜个差不多,是要对我们创建的这个窗口的背景不透明度进行设置。现在是160,最大是255,最小是0,我们改成0的话试试看,会发现整个窗口只剩下外头的一个边框了。
和这个类似的能设置的属性相当的多,而且如果是自己创建的窗口,自己新定义了方法以后,能调用的部分就更多了。这里只列出几个关于不透明度的属性。
opacity
窗口的不透明度(0 ~ 255)。范围外的数值会自动修正。
back_opacity
窗口背景的不透明度(0 ~ 255)。范围外的数值会自动修正。
contents_opacity
窗口内容的不透明度(0 ~ 255)。范围外的数值会自动修正。



 @command_window.x = 320 - @command_window.width / 2
 @command_window.y = 288

这两行是对窗口的坐标进行设定,同样也是刚才说到的通过对窗口属性值进行设定来改变窗口的外表特征的方法。其中有一个“@command_window.width”这里也说一下,窗口的属性值不仅是能够用等号进行设定,同样也可以直接像某个变量一样读取出来参与到其他值的计算中。



这个例子我们看到,选项是竖着排列着的,如果我想让它横着排列该如何做呢?我们来看下一个例子“Window_ShopCommand”,先整个看一下代码:

class Window_ShopCommand < Window_Selectable
 #--------------------------------------------------------------------------
 # ● 初始化对像
 #--------------------------------------------------------------------------
 def initialize
 super(0, 64, 480, 64)
 self.contents = Bitmap.new(width - 32, height - 32)
 @item_max = 3
 @column_max = 3
 @commands = ["买", "卖", "取消"]
 refresh
 self.index = 0
 end
 #--------------------------------------------------------------------------
 # ● 刷新
 #--------------------------------------------------------------------------
 def refresh
 self.contents.clear
 for i in 0...@item_max
 draw_item(i)
 end
 end
 #--------------------------------------------------------------------------
 # ● 描绘项目
 # index : 项目编号
 #--------------------------------------------------------------------------
 def draw_item(index)
 x = 4 + index * 160
 self.contents.draw_text(x, 0, 124, 32, @commands[index], 1)
 end
end

我相信大家的第一印象是里面有不少东西都见过,这里我也只就几句以前没见过的具体说说。

首先看initialize方法中的这三行

 @item_max = 3
 @column_max = 3
 @commands = ["买", "卖", "取消"]

这三行的目的是为窗口指定内容以及安排窗口内选项的排列顺序。
首先的@item_max这个值,是所有选项的数量,可以看到,这里有“买”、“卖”、“取消”三个选项,所以这个值在这里是3。
接着说@column_max这个值,这个值负责的是所有选项排列时的列数,这里给的值是3,结合上面的选项数量,这里的意思就是要把3个选项排成3列,很显然的,每列就是1个元素了。
最后说@commands,和刚才例子中的那个参数一样,这里负责的是选项的内容。要强调一点的是,这里这个数组内元素的数量,一定要与前面@item_max的值对应起来,否则就会出现错误。



 self.contents.draw_text(x, 0, 124, 32, @commands[index], 1)

这里其实也很简单,只是描绘的文字是在初始化时定义好的@commands数组中的一个。



下面我们也对这个例子进行一个简单的修改。
首先,我们把“买”、“卖”、“取消”修改成我们想要的文字——“购买”、“出售”、“离开”:这一步很容易,修改@commands数组即可实现。
接着我们再增加一个选项“讨价”:这里修改的地方就比较多了。
第一步要修改@commands数组,在后面追加一个元素,使其变为:@commands = ["购买", "出售", "离开", "讨价"];
第二步修改@item_max以及@column_max的值为4,这样也就吻合了我们设定的四个选项了;
第三步,嗯?还有第三步??可能不少朋友觉得前两部就已经完成了,那么运行一下看看,怎么看不到“讨价”这个选项呢?原因在这里,x = 4 + index * 160和self.contents.draw_text(x, 0, 124, 32, @commands[index], 1),因为坐标的问题,所以导致“讨价”描绘在了窗口的外面。我们来做一些适应性的修改x = 4 + index * 120和self.contents.draw_text(x, 0, 84, 32, @commands[index], 1)。
修改完毕了,运行一下试试看吧。

这就是我们介绍的两个例子,由此看来动态窗口并不难创建。下面我们先根据这两个例子的一个不足来引发下一讲的内容,根据上面我们所讲的,如果我们创建一个有很多选项的窗口,那么窗口的高度或者宽度将最终大于窗口本身的宽高,而出现到了屏幕外面的情况,但平时我们所看到的物品菜单可没有这样,相反的,它还可以根据我们的光标移动自动的进行滚动,这个是如何做到的呢?下一讲我们就着重介绍这种窗口是如何实现的。


鸡蛋

鲜花

评论 (0 个评论)

facelist doodle 涂鸦笔

您需要登录后才可以评论 登录 | 注册会员

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

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

GMT+8, 2024-4-26 14:35

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

返回顶部