目前共有1篇帖子。
【教程】跟我從頭學腳本(十四)
1樓 蓝晶の骑士 2011-2-10 23:46
轉載自: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^

回復帖子

內容:
用戶名: 您目前是匿名發表
驗證碼:
 
 
©2010-2024 Purasbar [手機版] [桌面版]
除非另有聲明,本站採用創用CC姓名標示-相同方式分享 3.0 Unported許可協議進行許可。