热度 1|
Window类,是RPGMAKER中最为常见的一个类,游戏中出现的各种窗口都是Window类的子类,首先着重分析一下一个窗口类脚本的内容分别指代什么意义。我们拿最简单的金钱类作为例子进行讲解。(这就是那节FLASH的内容,明白的请跳过!)
(带有■的行为系统自带的默认脚本部分)
■class Window_Gold <Window_Base
请注意红色的部分,它代表Window_Gold这个类是Window_Base这个类的子类,当然反过来说,Window_Base就是Window_Gold的父类。
那么为什么是Window_Base而不是其他的什么类呢,原因可以这样认为,Window_Base中常被作为描绘静态文字的窗口,这个说法当然是相对于下一讲中要提到的Window_Selectable来讲的,我对它们之间的区别定位于只要是没有选项出现的窗口,就可以使用Window_Base作为此窗口的父类来使用;如果出现了选择项,那么就用Window_Selectable。
下面来逐句看解释。
■ def initialize
这句是初始化函数,一般情况下是每个类必须有的,当然,如果和父类的完全一样,就不需要了。
■ super(0, 0, 160, 64)
这里的super在脚本编辑器模式下可以看到是蓝色的,说明它本身是个保留字,它的作用是调用父类中的同名方法initialize,所以这句话也就是创建了窗口本身,而它后面跟着的4个参数分别代表了窗口左上角的x坐标、y坐标、窗口宽度、窗口高度。
经常有的朋友想要修改窗口坐标,修改窗口大小,就是要从这里改。
■ self.contents = Bitmap.new(width - 32, height - 32)
这句也是至关重要的一句。如果我们把整个窗口比作一个画板,那么上面已经定好了板子的位置和大小了,但光有板子是没法来画的,我们还需要画纸,没错,self.contents,这个东西就是所谓的画纸。这里顺带一提,self指的正是窗口本身。
我们可以从代码中看出,它本身是一个Bitmap类的对象,而后面括号中的两个参数就是这张纸的大小。width height这两个方法分别代表着整个窗口的宽度和高度。
所以,现在我们可以看出,为什么我们窗口内描绘的内容总是要和窗口的边缘有一定的距离,就是因为这里为了让画纸为画板留下一定的空间,所以在上下左右各留了一些距离(这个距离的大小是16),那么是不是我们不减这个32的话,就可以不留这个边儿呢?诸位可以自己先试试看,答案最后揭晓。
■ refresh
英语学的好的朋友,应该知道这个词本来的含义——刷新。这里调用的下面定义的refresh这个方法,我们需要知道的是它执行的工作正如它的含义一般,刷新整个画纸上的内容,至于是怎么刷新的,接着看。
■ end
这个就不说了……
好了,下面开始看刷新方法是如何实现刷新功能的。
■ def refresh
■ self.contents.clear
这句,首先self.contents刚才已经说过了,是画纸。clear呢,也正如其名,清除。这句连在一起,意思就是要把目前画纸上的内容清空。好了,这下成了崭新的白纸了。
■ cx = contents.text_size($data_system.words.gold).width
这里涉及到了一个Bitmap类的方法text_size,简单说一下,它可以取出当前Bitmap类对象中描绘指定文字时所占的空间。形象一点的说法就是,它能够准确的告诉你,用某个粗细的笔在这张纸上写下几个字,这几个字的位置以及占用空间的宽度和高度。
而本例中的这里,只取的是这个空间的宽度。
■ self.contents.font.color = normal_color
再一次看到了画纸,看来想要在窗口里写些什么东西是离不开画纸这一点是显而易见了。
这句的意思就是给画纸指定一种颜色——normal_color,其实就是白色,当然这个normal_color是事先定义过的,你也可以在等号右边直接写诸如 Color.new(255, 0, 0) 这样的代码,我写的是红色的代码。
在这里顺便也列出其他几种能够给画纸指定的内容,它们分别是:
self.contents.font.name = "宋体"
字体的设定
self.contents.font.size = 24
字号的设定
self.contents.font.bold = true
是否粗体的设定[等号右边true/false可选]
self.contents.font.italic = true
是否斜体的设定[等号右边true/false可选]
■ self.contents.draw_text(4, 0, 120-cx-2, 32, $game_party.gold.to_s, 2)
重头戏来了,这句便是一句真正往画纸上写文字的语句,让我们仔细来分析分析。
draw_text(4, 0, 120-cx-2, 32, $game_party.gold.to_s, 2)
哇,括号里好多的内容,它们都是什么呢?
最前面的两个“4, 0, ”是要写字的x坐标和y坐标:有了这两个值,就可以明白要往什么地方写了。
紧接着的两个数字“120-cx-2, 32,”是给你写字的空间的宽度和高度:就是说,给你这么大的地方,你在里面写字,能写下最好;写不下嘛,挤一挤也得写;要是挤一挤也写不下,那就能写多少写多少……
“$game_party.gold.to_s,”:这个就是要写的具体的字了,这里可以是直接给定字符串,也可以是字符串变量,或者是其他类型的变量转换而来的,总之这里的值必须是一个字符串类型。
“2”:最后的这个2是做什么的呢?它代表的是写字时的对齐规则,这里有三种规则,居左、居中、居右,分别对应这0、1、2,如果这个值你不写,那么系统会自动认为你要居左写。
下面的两行正好作为练习,看看自己能不能看明白呢?
■ self.contents.font.color = system_color
■ self.contents.draw_text(124-cx, 0, cx, 32, $data_system.words.gold, 2)
■ end
■end
第一讲的内容这里就结束了。
记得刚才说的把创建画纸时的- 32 去掉以后的结果么?在窗口的右边和下边的中央,分别多出了一个白色的小箭头(默认素材),这是什么意思呢?其实,这个代表,我们去掉了那个 - 32 以后,创建的画纸的确是比原来大了,箭头的意思就是在这里的右面或者下面,还有一些画纸在。看来很可惜,虽然纸是变大了,但它仍然还是无法抹去窗口边缘的那一小部分镂空,这里也说一下,那部分镂空是系统Window类中定义的内容,目的大概就是为了美观吧!
站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作
GMT+8, 2024-4-25 14:29
Powered by Discuz! X3.1
© 2001-2013 Comsenz Inc.