目前共有1篇帖子。
【教程】跟我從頭學腳本(十三)
1樓 蓝晶の骑士 2011-2-10 23:46
轉載自:www.66rpg.com            

原作者:Dubealex             

        Near Fantastica(特別講)            

主講人(翻譯):frantice            
電子書製作:小湖  


第十三講: Scene和Window 專題三


我們繼續上一將的內容, 今天開始分析BLOCK3:
BLOCK 3: 
1 self.contents.font.color = text_color(6) 
2 self.contents.draw_text(250, 0, 50, 32, "Gold:") 
3 self.contents.font.color = text_color(0) 
4 self.contents.draw_text(305, 0, 100, 32, $game_party.gold.to_s) 

我們對前3行都應該不陌生了,現在著重看下第4行.末尾的 to_s 是把前面的$game_party.gold轉換為字符串, 這樣我們就能把它作為文章顯示出來. 所以呢,如果我們把一個包含數值的變量放在前面,那麼就會報錯"Cannot convert Fixnum into String". 

BLOCK4 基本和3一樣, 只是用地圖ID代替了金錢, 所以我們直接跳過去,看最後一快,update.

BLOCK 5: 
1 def update 
2 if Graphics.frame_count / Graphics.frame_rate != @total_sec 
3 refresh 
4 end 
5 end 
6 end 
這裡我們定義了update方法. 我們會發現, 這種方法不在window內使用, 而是在scene里使用,它更新已存在的窗口, 因為我們在scene 里讓它更新.不需要update 的窗口沒有任何update 方法, 在後面的Scene 里我們會有更好的了解.
我們現在看第2行.它是什麼意思呢? 它是個if 語句, != 代表」不等於」,那麼這裡的if 就是當時間發生變化的時候, 就刷新. 這樣, 新的時間就出來了.

好了,這麼一個窗口就做好了, 我們來做第2個窗口, 就是左邊顯示人物名字和職業的那欄(見示意圖)在原先的Window_1下面添加Window_2.
代碼:

class Window_2 < Window_Base 
 #BLOCK 1 
 def initialize 
   super(0, 0, 200,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 * 90 
     actor = $game_party.actors[i] 
     self.contents.font.color = text_color(6) 
     self.contents.draw_text(x, y, 200, 32, actor.name) 
     self.contents.font.color = text_color(4) 
     self.contents.draw_text(x, y+32, 200, 32, actor.class_name) 
   end 
 end 
end

這裡我們繼續給它分成2塊.
BLOCK1 和前面的一樣,不多解釋了,
BLOCK2 
第一行:這是個for… loop語句. .size 是ruby的一個命令,用來知道一個數組,或者一個字符串的大小. $game_party.actors就是一個數組變量, 它包含了當前隊伍中的人物. 要知道的是數組的編號是從0開始, 而不是從1 開始的.也就是說, 你隊伍中的第一個人的ID不是1, 而是0 . 所以呢,這裡的for…loop就從0開始, 到當前隊伍總人數為止.(3個點, 不包括這個數) 那為什麼不能包括最後一個數呢? 假設有4個人的隊伍, 那麼i 的值就應該是0, 1, 2, 3. 也就是for i in 0…4 ,明白了嗎? 4是人物數量, 但是不能算進去.
第二,三行 因為我們還在loop的循環中, 所以我們這裡的計算並不是一次完成的. x=0, 就創建了一個局部變量,值為0,  y = i * 90,也創建了一個局部變量, 值應該是為0, 90, 180, 270.
第四行;  這行是來節省空間的, 並不是必須的一行.但是它很管用, 因為它使下面幾行變得更容易理解.看看它是怎麼工作的吧:
首先它創建了一個局部變量叫actor, 讓它為$game_party.actors[ i ]. 
--> 然後呢,下面幾行中,我們就能用actor.name 的表達來代替$game_party.actors[ID].name , 是不是很方便呢?
第六行:  因為有了第四行,我們這裡的表達也清爽多了^0^
第八行:  和第六行類似,除了y 坐標..我們用 y+32 因為我們需要在角色的名字下面顯示他的職業(要記住y 值越大顯示得就越下面哦) 之所以是32是因為我們什麼地方都是32的高度,而且這樣也很合適.

回復帖子

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