转载自:www.66rpg.com              
原作者:Dubealex               
        Near Fantastica(特别讲)              
主讲人(翻译):frantice              
电子书制作:小湖  
第十四讲: Scene和Window 专题四 
还有最后一个window ^0^, 就是右边那个显示人名, 等级, HPSP, 以及经验的那部分.新建个脚本Window_3 
代码: 
class Window_3 < Window_Base  
 #BLOCK 1  
 def initialize  
   super(0, 0, 440,380)  
   self.contents = Bitmap.new(width-32, height-32)  
   self.contents.font.name = "黑体"    
   self.contents.font.size = 20 
   #BLOCK 2  
   for i in 0...$game_party.actors.size  
     x = 0  
     y = i * 150  
     if i >= 2  
       x=250  
       y-=300  
     end        
     actor = $game_party.actors[i]  
     self.contents.font.color = text_color(6)  
     self.contents.draw_text(x, y, 200, 32, actor.name)  
     offset_x=contents.text_size(actor.name).width+10  
     self.contents.font.color = text_color(4)  
     self.contents.draw_text(x+offset_x, y, 200, 32, "Lv: " + actor.level.to_s)  
     draw_actor_hp(actor, x, y+32)  
     draw_actor_sp(actor, x, y+64)  
     draw_actor_exp(actor, x, y+96)  
   end  
 end  
end 
BLOCK1  不说了, 大家应该都很熟悉了 
BLOCK2 
1 for i in 0...$game_party.actors.size  
2 x = 0  
3 y = i * 150  
4 if i >= 2  
5 x=250  
6 y-=300  
7 end  
8 actor = $game_party.actors[ i]  
9 self.contents.font.color = text_color(6)  
10 self.contents.draw_text(x, y, 200, 32, actor.name)  
11 offset_x=contents.text_size(actor.name).width+10  
12 self.contents.font.color = text_color(4)  
13 self.contents.draw_text(x+offset_x, y, 200, 32, "Lv: " + actor.level.to_s)  
14 draw_actor_hp(actor, x, y+32)  
15 draw_actor_sp(actor, x, y+64)  
16 draw_actor_exp(actor, x, y+96)  
17 end  
18 end  
19 end  
第四-六行 为什么要多出这个呢?因为我们队伍中的队员不一定是只有2个的,当超过2个时, 我们的界面是把多出来的都给放到右边的, 所以4名队员的坐标应该分别是 (0, 0) , (0, 150), (250, 0), (250, 150 )  
第十一行: 这里我们创建了一个新的局部变量叫"offset_x",它的值为角色名字的宽度+10 (留出一点空间) 这个干吗用呢?我们描绘角色的等级水平时用的. 因为我们要Level 描绘在角色名字的右边, 而角色名字又不是统一长度, 所以我们必须要用一个变量来确定level 文字的x 坐标. contents.text_size(actor.name).width 是一个命令,这样我们就能知道这个东西的长度了.我们可以用height替换width 来获得它的宽度. 
第十三行: 这个是描绘角色等级水平的地方.我们看到了,它给已存在的x坐标增加了"offset_x" 的值..这样, level 就一直在角色名字的右边了^0^.. 还没忘记.to_s 吧.. 等级是一个integer (抽象的整数类), 我们必须把它转换为字符串. 
第十四行: 这个draw_actor_hp哪来的? draw_actor_hp 事实上是一个方法名,(不是变量哦)i因为它后面的括号里有argument. 那么这个方法是哪里定义的呢?.父类 Window_Base 里咯.好,我们到它的父类里找,找到如下: 
 def draw_actor_hp(actor, x, y, width = 144) 
   # 描绘字符串 "HP" 
   self.contents.font.color = system_color 
   self.contents.draw_text(x, y, 32, 32, $data_system.words.hp) 
   # 计算描绘 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 
   self.contents.font.color = actor.hp == 0 ? knockout_color : 
     actor.hp <= actor.maxhp / 4 ? crisis_color : normal_color 
   self.contents.draw_text(hp_x, y, 48, 32, actor.hp.to_s, 2) 
   # 描绘 MaxHP 
   if flag 
     self.contents.font.color = normal_color 
     self.contents.draw_text(hp_x + 48, y, 12, 32, "/", 1) 
     self.contents.draw_text(hp_x + 60, y, 48, 32, actor.maxhp.to_s) 
   end 
 end 
就是这里了^0^ . 我们先不管它父类怎么定义, 反正我们的3个window是都建立好了,接下来就是创建我们神奇的scene了^0^ 
            
                      

