|
按照 Ace 默認的規劃,左邊預留了顯示臉圖的空間,所以實際角色名稱的深色調並不是緊靠左邊,而是有一段距離,因為接下來要做臉圖尺寸的修改,會超過原本默認的 96 * 96,如果不改臉圖尺寸,角色名稱的深色調就可以直接緊靠左邊側,就不需要佔那麼寬了,這一張圖,我放在 Graphics/Pictures 資料夾下,當然這不是絕對的,您可以改放在別處,只是要相應修改讀取它的地方。
現在,先把默認的對話窗口弄成完全透明,隱藏起來,開啟 Window_Message,在初始化物件 def initialize 的位置下,加入一行:
self.back_opacity = 0
這也就是把對話窗口的背景色設為完全透明了,但這還不夠,對話窗口的框邊還在,找到更新視窗背景的 def update_background 位置,把這一行:
self.opacity = @background == 0 ? 255 : 0
改成:
self.opacity = 0 #@background == 0 ? 255 : 0
好,這樣就完全透明了,接下來,要顯示對話框的背景圖。
同樣是 Window_Message 腳本,在初始化物件 def initialize 的位置下,加入一行:
create_back_ground
然後找個適當的位置,放上這一段:
#--------------------------------------------------------------------------
# ● 生成對話框背景圖
#--------------------------------------------------------------------------
def create_back_ground
@back_ground = Sprite.new
@back_ground.bitmap = Cache.picture("messagebox") #取對話框圖檔
@back_ground.x = 0
@back_ground.y = y + 5
end
圖的起始 x 座標是 0,這應該不用多說,因為全屏幕寬度嘛,但由於對話框有邊距,而圖上的分隔線比邊距還窄,所以如果把窗口高度設為 150,那勢必有一部份藍色漸層上緣會被邊距遮到,為避免因此造成角色名稱文字顯示不完整,對話框窗口高度實際上要比圖大一點點,我設定成 155,以避開它,所以 y 要加 5,往下移五個像素。
如果要把這個對話框圖放在別的資料夾,譬如 Graphics/System 下,取對話圖檔的那一行就要改成:
@back_ground.bitmap = Cache.system("messagebox") #取對話框圖檔
然後,在更新視窗位置 def update_placement 那兒,最後加一行:
@back_ground.y = y + 5
這樣,就可以配合事件指令中對話框的位置,讓對話框圖片顯示在靠上、置中、靠下了。
對了,記得要加上釋放對話框圖片的程式碼,在釋放背景精靈 def dispose_back_sprite 中,加一行:
@back_ground.dispose
好,現在修改後測試效果如下:
其實,不把窗口透明化,直接針對生成背景 def create_back_bitmap 和背景精靈 def create_back_sprite 這兩個來做到去除默認窗口背景也可以,但因為顧慮到恢復默認腳本的可能,以及修改的方便性,就決定用目前的方式來做了。
再來,就是實際的對話內容修改了。
2. 角色名稱的顯示設置
顯示角色名稱有幾種方式,一是 \N[n] 這種顯示預設第n號的角色名稱,但這樣限制了角色名稱的範圍,所以我採用的是第二種方式,自訂一個控制字符來顯示我要的名稱,我的決定是 \name[角色名稱] 這種形式,做好後,[] 中括號內的角色名稱就直接顯示在對話框上方藍色漸層的深色區域。
要做到這一點,首先就要針對輸入對話內容作控制字符處理,如果我在默認腳本的控制符的處理 def process_escape_character 那兒做不是不行,但比較麻煩,我決定像翻頁文字一樣,另外來做處理,而且是在所有控制符處理之前先行處理好,所以,找到處理所有內容的 def process_all_text 這一段,看到:
text = convert_escape_characters($game_message.all_text)
這是把對話內容中的控制字符預處理的語法,在 Window_base 中可以找到它的 def 和說明,我們不細述,現在,在這一行的下方加上:
#提取角色名稱
text.gsub!(/\ename\[(.+?)\]/i) {@showname = $1 }
這一行的作用是把 \name[XXXXXX] 的 XXXXXX 給抓取出來,如果您用的是 \name[李逍遙] 那 @showname 的值就是 李逍遙 了。
然後,再找到翻頁處理 def new_page 的位置,看到:
draw_face($game_message.face_name, $game_message.face_index, 0, 0)
改成:
draw_face($game_message.face_name, $game_message.face_index, 0, 35)
並且,在它的下方加兩行:
draw_text(100, 12, 150, line_height, @showname) #描繪角色名稱
@showname = ""
記得修改下面的 y 位置:
pos[:y] = 0 + 35
好了,就是這麼簡單的兩行,但您以為成功了嗎?其實沒有,還有一個地方沒有做,就是視窗高度沒改變,前面說過,默認的窗口只有 120,如果不去改它,顯示的字不能高於 120,而對話框的高度是 150,所以要拉高視窗的高度,而後來修改的 pos[:y] 則是對話內容的 y 座標,因為我把對話窗口高度拉高為 155,所以必須適當調整才行,不然對話內容會整個上移偏離默認的原位置。
好,找到 def window_height 了,把:
fitting_height(visible_line_number)
改成:
155 #fitting_height(visible_line_number)
這樣就可以了,描繪角色名稱那一行中,100 是 x 座標,5 是 y 座標,150 是顯示名稱的寬度範圍,line_height 是行高,也就是一行文字顯示的文字高度,因為預留了臉圖空間,所以 x 是 100,而 5 則是微調角色名稱的適當高度位置所得,如果顯示位置不滿意,可以自行調整 x, y 座標的值。
下圖是修改後測試結果:
唔,似乎有問題,角色名稱雖然正確顯示在上面,但對話內容中還重覆顯示了一次角色名稱,好吧,提取角色名稱的地方沒有做好,所以回頭去修改,把:
#提取角色名稱
text.gsub!(/\ename\[(.+?)\]/i) {@showname = $1 }
改成:
#提取角色名稱
text.slice!(/\[(.+?)\]/i)
@showname = $1
即可,再測試結果:
再來,就是對於臉圖的處理了,我想要兩倍高度的臉圖,也就是近似半身肖像的臉圖,而不是只有一張臉,但我又想要保留原來臉圖默認選擇的方便性,怎麼做?
3. 臉圖描繪的修改
站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作
GMT+8, 2024-4-27 06:53
Powered by Discuz! X3.1
© 2001-2013 Comsenz Inc.