注册会员 登录
Project1 返回首页

j433463的个人空间 https://rpg.blue/?312267 [收藏] [复制] [分享] [RSS]

日志

修改小筆記 part.5

已有 457 次阅读2013-1-24 08:55 |个人分类:腳本修改筆記

這是對默認腳本的修改筆記,本篇主題是關於對話框的修改,請勿私自轉載,非商業性質請隨意用於您的遊戲中,商業性質的您要用我也拿您沒辦法。

1. 使用自製的對話框

 這個修改方式並非老獅自創發現,而是不久前 66rpg 論壇 Ace 提問區的一個帖子中得來的方式,但卻是對話框修改的基礎。

 首先,準備一張自製的對話框,這對話框按照默認規格是四行文字,全屏幕寬度,所以是 544 * 120,但我想要在對話框上方加上一個顯示角色名稱的位置,所以改高為 150,圖如下:
 


 按照 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. 臉圖描繪的修改


评论 (0 个评论)

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-27 06:53

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

返回顶部