当前位置:首页 > RMXP初初级脚本教程
X坐标return self.index * 60 + 380
Y坐标 return self.index % 2 * 150 + 220
(这里加了个%2的效果,令角色站成了两行,请通过计算自行理解) Z坐标 return self.index
练习题:自行尝试着改造出一个45度或者三角形队列(……)的战斗画面。 提示:现在还没有教大家使用case分歧,到后面掌握了脚本的分歧用法之后,也可以不需要让self.index参与计算。不过现在为了熟悉数字修改,还是按默认的格式修改吧。
【数字篇?范例二:了解数字的源头在哪里】
1、从Window_Status追溯到Window_Base 核心语句:draw_actor_xxxxxx(@actor,x,y)
修改窗口内的文字坐标、大小与宽高,同样是排版的重要一环。我们已经学会了修改窗口的数字,那么怎么修改窗口内文字的位置与大小呢。以
Window_Status为例(人物的状态窗口),打开之后你可以看到,里面有很多draw_actor_xxxx的语句,后面还跟着一个装有不少数字的括号。
这些其实就是游戏里,用来表示角色数据的描绘语句。其具体内容稍后再讲,首先我们看那些括号里的内容。@actor表示与角色挂钩,而后面的两个数字,就是坐标位置。可以随意进行修改,进而改变描绘数值的坐标。
比如说draw_actor_hp(@actor, 96, 112, 172)这一句。看到hp我们大概能够推测得出,它是和角色hp相关的内容。把96和112两个数字修改一下,然后进入游戏看看吧。你可以看到描绘HP的那一部分整个都挪动了。至于172那个
数字暂时不要动,同理下面的draw_actor_parameter(@actor, 96, 192, 0)里,也只先修改前两个数字,不要动最后一个。
好,现在所有draw_actor_xxxx的句子你应该已经会调坐标了。那么大小呢?这个也先放着不说,因为接下来我们要做的是吃透draw_actor_xxxx这套语句。用全局搜索Ctrl+Shift+F这一热键呼叫出搜索窗口,然后输入―draw_actor_name‖并按―开始搜索‖。
你可以看到下面这个窗口,列出了很多用到这句话的地方。我们转到第一个地方,Window_Base。
所谓Base,意思便是基础。我们可以将其理解成种出蔬菜的菜地。在这里生长的蔬菜(定义出的基本语句)被拿去到厨房(别的Window类)里做成菜肴(用来组成不同窗口的内容),但蔬菜的本质没有改变。看到我们转到的部分——
#-------------------------------------------------------------------------- # ● 名称的描绘 # actor : 角色
# x : 描画目标 X 坐标 # y : 描画目标 Y 坐标
#-------------------------------------------------------------------------- def draw_actor_name(actor, x, y)
self.contents.font.color = normal_color
self.contents.draw_text(x, y, 120, 32, actor.name) end
在这里很明显就给出了描绘角色名字的解释。def这个关键字就是―种出一种蔬菜‖的概念,我们姑且理解成——def(种) draw_actor_name(萝卜)这样的概念。后面的括号里,则是关于它的具体参数,与角色挂钩,然后还有它能够描绘的x和y坐标。把这三个内容装进括号之后,只要在Window_status里想
描绘角色的名字,直接写draw_actor_name出来,然后再在括号里写出
@actor(与角色挂钩,为何要加@我们回头再说),并用数字定义出x坐标和y坐标就行了。——所谓的,萝卜就种在这里,下锅前直接把萝卜拿去切片切丝切丁都随你处置。这个x与y,就是切丝切丁之类的,是你可以随意处置的数字。
再来搜索一个draw_actor_parameter。这里你可以看到括号里多了一个数字出来。
def draw_actor_parameter(actor, x, y, type)
这个type,就对应了刚才说过的不能乱改的第3个数字。它指代什么呢?角色能力类型。也就是攻击力、防御力、魔力、力量这样的参数。在这里有一个case分歧,它将type硬性规定在了0~6之间,所以type只能被赋予0~6之间的某个数字。当然,每个数字都对应不同的一种能力描绘。比如draw_actor_parameter(@actor, 96, 192, 0)表示描绘攻击力,而
draw_actor_parameter(@actor, 96, 224, 1)就表示描绘物理防御了。
最后再以HP的描绘为例。定位到这里:def draw_actor_hp(actor, x, y, width = 144)。在这里括号里多出了一个width参数,它表示整体宽度。在游戏里描绘HP的时候,并不是一两个字,而是类似【HP 765/765】这样的模式。这个width就表示它整体的可用宽度空间。在这里被初始化成了144,但在你于别的窗口里使用draw_actor_hp时,这个数字就能改的。通过拉长或者压缩它的宽度,你可以发现这串字可使用的空间在改变。(如果改到100,这串字就会被切掉一部分了)。具体的空间计算方法也在下面,是很直观的数字计算,你可以把width代入计算一下看看就能明白了。
2、基本描绘语句与相关系数
核心语句:self.contents.draw_text(x,y,字符串宽度,字符串高度,字符串内容,对齐方式)
这一部分内容本来应该在第三章才开始讲,不过因为也涉及了数字的内容并且如果不吃透这句话就没法吃透Window_Base的大多数def里的内容,所以提到这里先说吧。这一句就是描绘字符串的基本语句。基本上只要是在窗口内用脚本写字,就不能少了它。
self.contents.draw_text先照搬下来,然后我们看括号里的几个参数。X和Y不用多说了是表示坐标的,在Window_Base里大多数时候它们没有直接写成数字,而是用未知数X与Y直接替代,这样你在未来调用语句的时候,可以为X和Y赋值进而随意改变它的坐标(这也是为什么上面说x坐标和y坐标你可以随便改但别的数字先不要轻易动)。
字符串宽度,所谓的width,就是指你给你的字符串提供的描绘宽度。我没有细致计算过RM里每一个字的宽度,但一个中文大概宽度等于32,一个英文或数字大约等于16。要根据你想描绘的字符串的总宽度为它安排大于或等于的空间,否则就会出现装不下而切字的状况。
然后是字符串高度。同理不能太小,否则会把字给腰斩。大多数时候默认为32。
再后面就是具体的字符串内容了。有些变量本身就是字符串,比如actor_name(角色名字),但有些并不是,而是一个数值,比如actor.level(等级)。后者是不能直接写进来的,需要加一个.to_s在后面,表示将数字转化为字符串。(请对比def draw_actor_name和下面def draw_actor_level的区别)如果你想要写自己随意定义内容的字符串,就要用双引号框起来,这一点千万不能忘记。
但如果直接描绘一个定义好的变量就不需要用双引号。比如说:
blx = ―老子世界第一‖
self.contents.draw_text(x,y,144,32,blx) 这两句的效果和
self.contents.draw_text(x,y,144,32,‖老子天下第一‖)
所描绘出来的内容是一样的。
最后一个数字可加可不加,有时候你也会看到它。这代表字符串的对齐方式。即是说在你给出的描绘空间里,字符串是如何对齐的。0代表左对齐,1代表居中,2代表右对齐。当你把宽度拉得很大,有比较多空间的时候,改变这个参数会让你的字符串有不同的坐落位置。
接下来我们找到def draw_actor_hp,对其中的每一句字符描绘进行解说。
def draw_actor_hp(actor, x, y, width = 144) # 描绘字符串 \
self.contents.font.color = system_color
【↑这句话是字符颜色定义。system_color也是之前就被―种‖好的内容,你可以在Window_Base里同样找到def system_color。关于颜色的语句内容下面再讲。】
self.contents.draw_text(x, y, 32, 32, $data_system.words.hp)
【↑关于―HP‖这个名称的描绘。$data_system.words.hp是数据库变量,代替你在数据库―系统‖选项卡里填的HP称呼。你要是在数据库改成了―生命‖它就会描绘―生命‖,但是这样一来你会发现32的宽度就太窄了,字被压扁了。试着改成64来看看是不是好些了吧。】 # 计算描绘 MaxHP 所需的空间 if width - 32 >= 108 hp_x = x + width - 108 flag = true
elsif width - 32 >= 48 hp_x = x + width - 48 flag = false end
【↑这里是一堆计算和分歧的应用,计算一个新变量hp_x的数值(用于下面的描绘)以及flag这个变量的成立与否。分歧的知识我们会在第二章细讲。】 # 描绘 HP
共分享92篇相关文档