Project1

标题: 怎么样把回复魔法的数值描绘在画面上。 [打印本页]

作者: RPG三国杀    时间: 2012-5-3 22:00
标题: 怎么样把回复魔法的数值描绘在画面上。
战斗中使用回复魔法的物品都没有任何显示。请问如何显示那些数值。
可以的话,最好可以带上伤害美化的效果!谢谢!dsu_plus_rewardpost_czw
作者: lsu666666    时间: 2012-5-3 22:22
本帖最后由 lsu666666 于 2012-5-4 08:16 编辑


直接套用這個腳本就會有魔法回復數值的效果...可以參考
腳本來源:魔劍腳本鋪
腳本說明:魔劍腳本鋪

範例圖片:

設置方法  
顯示傷害數值 
追加精靈.damage(數值或字符串)
追加精靈.damage(數值或字符串, 是否會心一擊)
追加精靈.damage(數值或字符串, 是否會心一擊, 顏色編號)
追加精靈.damage(數值或字符串, 顏色編號)

★以下為範例,1行分別為不同的範例☆

追加精靈.damage(3500) # 跳出3500數值(數值為正數則表示扣血顏色)
追加精靈.damage('Miss') # 跳出Miss的字樣
追加精靈.damage(-1200) # 跳出1200數值(數值為負數則表示回血顏色)
追加精靈.damage(500, true) # 跳出500數值,並上面添加Sword56_Critical設定的字樣
追加精靈.damage(120, 2) # 跳出120數值,顏色採用Sword56_Damage第2號的設置
追加精靈.damage(125, true, 2) # 跳出125數值,顯示會心一擊內容、採用2號設置的顏色
顯示傷害數值,傷害數值和XP預設的傷害數值效果相同
追加精靈:代入了XP的「RPG::Sprite」類或是VX的「Sprite_Base」類的變量
     簡單說這個傷害效果就是「RPG::Sprite(Sprite_Base)」的函數就是了...
數值或字符串:傷害可以指定顯示數值外,也可以顯示文字內容,XP顯示的Miss就是字符串...
       指定數值(設定阿拉伯數字),則就會顯示那個數值座標傷害
       通常不會顯示負數符號,而是依照Sword56_Damage設置顯示不同顏色
       指定字串(被單或雙引號包圍住的內容),則就顯示該字串的內容
是否會心一擊:設true表示是;設false表示不是,是會心一擊的時候
       會在傷害數值(或文字)上面添加個小字,顯示Sword56_Critical設置的內容
       如果不設定這個參數,基本上都視為不是會心一擊
顏色編號:設定要採用的顏色,顏色通常都設定在Sword56_Damage設置中
     可以依據不同場合指定不同種顏色的傷害數值(例如HP傷害或SP傷害這樣...)
     如果不設定這個參數,基本上都視為指定了1號(文字顏色則不受影響)

變更傷害的移動類型 UP
!
追加精靈.damage_about = 移動編號
傷害直直的往上彈出來在往下掉的效果有些單調,有時你想要讓傷害移動的方式更多樣化
這時可以使用這個設置來變更傷害移動的方式,移動方式請在Sword56_Move設置中設定
預設的移動編號和Sword56_MoveX設置的數值相同  
  
判斷是否在顯示傷害 
追加精靈.damage?
確認指定的追加精靈中是否還有在顯示傷害
《返回值》還有傷害在顯示返回真(true);如果已經沒有傷害在顯示了就返回偽(false)
  
釋放傷害顯示 
UP!
追加精靈.dispose_damage
追加精靈.dispose_damage(第幾個傷害)
使用設置法1的話,會釋放正在顯示的所有傷害,要中途讓傷害快速的消失可以使用該腳本
通常情況下,基本上傷害跳完後,就會自動呼叫這個函數,所以基本上平時因該不會用上才是
不過此腳本處理自動釋放傷害的時候,都是使用設置法2,以免將不必要的傷害提早消失掉
第幾個傷害:指定第幾個跳出來的傷害,就將那個傷害給釋放就好,如果該傷害已釋放則啥都不做
      從0開始為第1個傷害,此外假設假設有3個傷害在顯示,釋放第2個傷害
      如果再次產生傷害的話,就算第1或第3個傷害未消失,還是可能取代第2個傷害的位置
      不過原則上這個設定主要還是腳本自動釋放傷害之用,所以不建議使用...
  
使用者自定設置說明
Sword56_Font = ['字體名稱', 字體大小]
其實在XP中的傷害顯示其實是靠文字來描繪的,這就是其中的一部分
這個設置會影響傷害數值或是字串還有會心一擊的文字都會影響
字體名稱:設定傷害想採用的字體,但有該字體不支援的字可能會有無法顯示的情況
字體大小:設定字體有多大,數值越大當然字就越大

Sword56_Revise = 5
傷害顯示的Y座標設定,希望傷口從身上、頭部、頭上、腳本...顯示的話都可在此進行修改
指定正數的話傷害會在比較下面的地方顯示,負數的話則是上面...

Sword56_MoveX = 1 
UP!  
設定一開始所採用的移動編號是多少,和上方設置方法中的變更傷害的移動類型相同
這個設置只是一開始指定之用,之後原則上就沒有用處了...

Sword56_Shadow = Color.new(紅, 綠, 藍)
設定傷害顯示中內容邊緣的顏色
紅、綠、藍:
  指定三原色,可以設定0~255的數值,數值越大則該顏色的含量就越大(越亮)
  三種顏色可以互相組合成各種不同的顏色,可以參考小畫面的編輯色彩做設定

【VX】Sword56_Rreveal =true 
是否要在預設的戰鬥中顯示傷害的效果,true為要;false為不要
要的話就會像XP一樣,技能動畫結束後敵人身上跳出傷害數值
不要的話則什麼事情都不會發生,而但會稍微降低一些腳本上的衝突率
由於VX只有敵人才有戰鬥圖像,所以只有敵人才會跳出傷害數值喔~
  
【1】Sword56_Critical = ['顯示內容', Color.new(紅, 綠, 藍)] 
UP!
【2】Sword56_Critical = ['圖片檔案名稱']
  

設定成功會心一擊時,在傷害上面顯示的內容
使用設置法1為用Sword56_Font設置的字體還有顏色進行描繪
使用設置法2為採用圖片來顯示,指定Pictures資料夾中的圖片名稱來表示
圖片的大小基本上不受限制,不過還是建議依照原本會心一擊字樣的大小做為圖片大小
以免會心一擊的圖片還蓋到傷害會是無法顯示完全的問題

【1】Sword56_Damage['識別內容'] = 類型 
UP!
【2】Sword56_Damage[顏色編號] = [正數類型, 負數類型]
【3】Sword56_Damage[顏色編號] = [正數類型, 負數類型, 暴擊時傷害編號]  

設定數值傷害或是文字傷害的描繪方式,設置法1用於文字傷害,如:Miss的字樣
而設置法2主要是用於傷害數值,當傷害的數值為正數時會採用 正數顏色或字串(扣血時)
如果傷害的數值為負數,則慘用 負數顏色或字串,基本上設置方式和Sword56_Critical有些類似
識別內容:當文字傷害的內容和此設定一樣時,就採用這個設置的內容
類型、正數類型、負數類型:
  如果想要用字體描繪傷害(或字串內容,以下只稱傷害)的話
  就將此設為『Color.new(紅, 綠, 藍)』來指定傷害顏色的並用字體描繪傷害
  如果是想要用圖片來顯示傷害的話,就設為『'圖片檔案名稱'』
  就可以指定Pictures資料夾的圖片來顯示傷害(顯示方式可參考素材規格說明)
  素材大小沒有規定,只不過建議大小和預設的傷害大小一樣為佳
  圖片依寬度分成10份,從0開始,所以圖片請以這個順序來畫:0123456789
  《範例圖片》
暴擊時傷害編號:當此傷害為暴擊傷害之時,則就切換使用別的傷害編號   
        也就是說當HP傷害採用1號,此設定為3好了,假設發生傷害
        如果沒有暴擊,就繼續採用這個傷害類型,如果發生暴擊,就切換3號的傷害類型
        這個只會判斷一次而已,也就是說切換傷害編號之後的Sword56_Damage  
        還是一樣有此設定的情況(設置法3),則將會忽略此設定不再連續採用
  
【1】Sword56_Move[移動編號].push [X座標增減, Y座標增減] 
NEW   
【2】Sword56_Move[移動編號].push [X座標增減, Y座標增減, 重複次數]  

設定傷害數值顯示的移動方式,這個設定有點類似於資料庫的動畫設定方式
每幀時間傷害數值顯示的位置移動多少距離,製造傷害彈出的效果出來   
移動編號 為1的移動方式和預設腳本的相同,不過要更改也是可以   
可以自行添加指定多個Sword56_Move設置
此外相同的 移動編號 的Sword56_Move設置可以重複設定來增加傷害顯示的時間
X座標增減、Y座標增減:   
  設定傷害顯示每幀時間所移動的座標距離,可以指定負數
重複次數:如果說移動的座標距離連續都是相同的時候,放太多設置法1的方式
     很容易佔據不少行數並看起來難以查找,可以設定設置法2的此設定
     將會自動視為設定了多少個設置法1的方式,看起來更為方便
Sword56_Move[5].push [3, -2]
Sword56_Move[5].push [3, -2]
Sword56_Move[5].push [3, -2]
Sword56_Move[5].push [3, -2]

# 使用設置法2,就可以簡寫成這樣,就有相同的效果了
Sword56_Move[5].push [3, -2, 4]
  
  
XP顯示SP傷害的方法   
由於XP本身沒有SP傷害的寫法,所以必須將SP傷害給改出來才行,以下為改法
腳本「Game_Battler 1」第20行附近發現以下腳本:
attr_accessor :damage                   # 傷害值
★下方插入以下腳本☆

attr_accessor :sp_damage
  
腳本「Game_Battler 1」第46行附近發現以下腳本:
@damage = nil
★下方插入以下腳本☆

@sp_damage = nil
   
腳本「Game_Battler 3」第259行附近發現以下腳本:
self.damage = -recover_hp
★下方插入以下腳本☆

self.sp_damage = -recover_sp if recover_sp != 0
   
腳本「Game_Battler 3」第314行附近發現以下腳本:
self.damage = nil
★下方插入以下腳本☆

self.sp_damage = nil
  
腳本「Sprite_Battler」第110行附近發現以下腳本:
damage(@battler.damage, @battler.critical)
★修改成以下腳本☆

if @battler.damage and @battler.sp_damage
# HP和SP傷害都有的場合
         damage(@battler.damage, @battler.critical) # ★1
          間隔時間.times{super ; Graphics.update} # 間隔時間
          damage(@battler.sp_damage, @battler.critical, 2) # ★2
        elsif @battler.sp_damage # 只有SP的場合
          damage(@battler.sp_damage, @battler.critical, 2)
       else ; damage(@battler.damage, @battler.critical) # 只有HP的場合
        end
        @battler.sp_damage = nil
間隔時間:當HP和SP同時都有時,會先跳出HP傷害後再跳出SP傷害
     (如果想要SP傷害先跳出來再跳出HP傷害的話...
      就把有標記★1和★2的那行腳本互換即可,以下內容已HP先跳出來為準)
     此設定就是HP跳出後,過多久才會跳出SP傷害(不然會同時顯示,傷害就會重疊)
     每設定40相當於現實中的1秒

腳本中有兩個『2』被我標記為紅色,表示那是採用Sword56_Damage設置的中
顏色編號為2的資料做為SP傷害顯示方式(圖片或顏色),可依自己喜好作更改
  
腳本「Scene_Battle 4」第430行附近發現以下腳本:
if target.damage != nil
★修改成以下腳本☆

if target.damage != nil or target.sp_damage
  1. module Sword
  2. #=======================================
  3. #★魔劍工舖 - 傷害顯示強化 2.01 (XP)
  4. # http://blog.yam.com/a870053jjkj/
  5. #=======================================
  6.   Sword56_Damage, Sword56_Move = {}, {} ; Sword56_Move = Hash.new{|h, k| h[k] = []}
  7. #=======================================
  8. =begin
  9. ● 設置方法(追加精靈 為 RPG::Sprite類)
  10. 顯示傷害:【1】追加精靈.damage(數值或字串)
  11.      【2】追加精靈.damage(數值或字串, 是否會心)
  12.      【3】追加精靈.damage(數值或字串, 是否會心, 傷害編號)
  13.      【4】追加精靈.damage(數值或字串, 傷害編號)
  14. 變更傷害移動類型:追加精靈.damage_about = 移動編號
  15. 判斷是否顯示傷害:追加精靈.damage?
  16. 釋放傷害:追加精靈.dispose_damage(第幾個傷害&)
  17. =end
  18. #=======================================
  19. #● 使用這自定設置
  20. Sword56_Font = ['Arial Black', 32] # 設定傷害顯示的 ['字體名稱', 大小]
  21. Sword56_Revise = 5 # 顯示傷害數值的Y座標修正,可指定負數
  22. Sword56_MoveX = 1 # 設定顯示傷害時,設定一開始所採用的 移動編號 是何者
  23. Sword56_Shadow = Color.new(0, 0, 0) # 設定傷害的陰影顏色
  24. Sword56_Critical = ['CRITICAL', Color.new(255, 255, 255)] # 設定暴擊的 ['內容', 顏色&]
  25. # 設定顏色表示腳本描繪,不設定顏色則將內容當檔名讀取讀取圖片之用
  26. #--------------------------------------------------------------
  27. #○ 傷害數值的顏色或圖片表示表
  28. #【1】Sword56_Damage['識別內容'] = 類型
  29. #【2】Sword56_Damage[傷害編號] = [正數類型, 負數類型]
  30. #【3】Sword56_Damage[傷害編號] = [正數類型, 負數類型, 暴擊時傷害編號]
  31. # 類型、正數類型、負數類型:
  32. #   使用腳本描繪傷害數值或文字內容,可設定『Color.new(紅, 綠, 藍)』
  33. #   使用圖片描繪傷害數值或文字內容,可設定『'圖片檔案名稱'』
  34. # 圖片你遊戲資料夾中的 Pictures 資料夾裡的圖片
  35. # 識別內容:為當傷害是字串時,如果和識別內容相同就採用(沒設定為白色顏色)
  36. # 通常顯示傷害腳本沒指定傷害編號的情況下,都會採用編號1號的顏色為標準
  37. # 暴擊的情況有設定 暴擊時傷害編號,暴擊時將切換至該設定的傷害編號
  38. Sword56_Damage[1] = [Color.new(255, 255, 255), Color.new(176, 255, 144)]
  39. Sword56_Damage[2] = [Color.new(0, 0, 100), Color.new(103, 238, 255)]
  40. #--------------------------------------------------------------
  41. #○ 傷害移動規則表
  42. #【1】Sword56_Move[移動編號].push [X座標增減, Y座標增減]
  43. #【2】Sword56_Move[移動編號].push [X座標增減, Y座標增減, 重複次數]
  44. Sword56_Move[1].push [0, -4, 2]
  45. Sword56_Move[1].push [0, -2, 2]
  46. Sword56_Move[1].push [0, 2, 2]
  47. Sword56_Move[1].push [0, 4, 6]
  48. Sword56_Move[1].push [0, 0, 28]
  49. Sword56_Move[2].push [2, -3, 10]
  50. Sword56_Move[2].push [2, -2, 5]
  51. Sword56_Move[2].push [2, 0, 5]
  52. Sword56_Move[2].push [2, 1, 5]
  53. Sword56_Move[2].push [2, 2, 5]
  54. Sword56_Move[2].push [2, 3, 5]
  55. Sword56_Move[2].push [2, 5, 25]
  56. #=======================================
  57.   $Sword ? $Sword[56] = true : $Sword = {56=>true} # 腳本使用標誌
  58.   $Sword_F12_Error = {} unless $Sword_F12_Error # F12除錯標誌
  59.   Sword56_Revise += Sword56_Revise > 0 ? -Sword56_Revise * 2 : Sword56_Revise.abs
  60.   Sword56_Move.each do |key, value| move = Sword56_Move[key] ; Sword56_Move[key] = []
  61.     value.each{|item| (item[2] ? item[2] : 1).times{Sword56_Move[key].push item[0..1]}}
  62.   end
  63. end
  64. # -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  65. #□ RPGXP 數據結構
  66. module RPG
  67.   #======================================
  68.   #■ 追加了 RPGXP 使用的各種效果處理的精靈的類
  69.   class Sprite < ::Sprite
  70.     include Sword # 連接自定設置
  71.     attr_writer     :damage_about # 每幀傷害左右移動距離
  72.     #-------------------------------------------------------------
  73.     #● 初始化物件(視口)
  74.     alias sword56_initialize initialize unless $Sword_F12_Error[56]
  75.     def initialize(viewport = nil)
  76.       sword56_initialize(viewport)
  77.       @damage_sprite56, @_damage_about = [], [] # 顯示傷害精靈, 該左右移動方向
  78.       @damage_duration56, @damage_about = [], Sword56_MoveX # 剩餘時間, 左右移
  79.     end
  80.     #-------------------------------------------------------------
  81.     #● 顯示傷害(傷害數值或字串, 會心一擊標誌, 傷害編號)
  82.     def damage(value, critical = false, color = 1)
  83.       return if value.is_a?(Array)
  84.       
  85.       color = Sword56_Damage[color][2] if Sword56_Damage[color][2] if (
  86.       Sword56_Damage[color].is_a?(Array) and critical == true) # 暴擊時切換傷害編號
  87.       
  88.       (color = critical ; critical = false) if critical.is_a?(Color) or critical.is_a?(Integer) # 另指定
  89.       color = color.is_a?(Color) ? color : Sword56_Damage[color] # 獲取顏色
  90.       i = 0 ; loop{break unless @damage_sprite56[i] ; i += 1}
  91.       damage = value.is_a?(Numeric) ? value.abs.to_s : value
  92.       bitmap = Bitmap.new(160, 48) # 產生位圖
  93.       bitmap.font.name, bitmap.font.size = Sword56_Font[0], Sword56_Font[1]
  94.       bitmap.font.color = Sword56_Shadow # 設定陰影顏色
  95.       if value.is_a?(Numeric) # 傷害數值的場合
  96.         str_color = value >= 0 ? color[0] : color[1]
  97.         if str_color.is_a?(String) # 傷害數值圖片傷害描繪
  98.           bitmap1 = RPG::Cache.picture(str_color)
  99.           rect = [bitmap1.width / 10, bitmap1.height]
  100.           damage1 = value.to_s.scan(/\d/) # 分解為傷害數組
  101.           damage1.each_index do |ii|
  102.             bitmap.blt((160 - damage1.size * rect[0]) / 2 + rect[0] * ii,
  103.             16, bitmap1, Rect.new(rect[0] * damage1[ii].to_i, 0, rect[0], rect[1]))
  104.           end
  105.         else # 傷害數值顏色描繪
  106.           bitmap.draw_text(-1, 12 - 1, 160, 36, damage, 1)
  107.           bitmap.draw_text(+1, 12 - 1, 160, 36, damage, 1)
  108.           bitmap.draw_text(-1, 12 + 1, 160, 36, damage, 1)
  109.           bitmap.draw_text(+1, 12 + 1, 160, 36, damage, 1)
  110.           bitmap.font.color = value >= 0 ? color[0] : color[1]
  111.           bitmap.draw_text(0, 12, 160, 36, damage, 1)
  112.         end
  113.       else # 文字傷害的場合
  114.         if Sword56_Damage[damage].is_a?(String) # 文字傷害圖片傷害描繪
  115.           bitmap1 = RPG::Cache.picture(Sword56_Damage[damage])
  116.           rect = Rect.new(0, 0, bitmap1.width, bitmap1.height)
  117.           bitmap.blt((160 - rect.width) / 2, 12, bitmap1, rect)
  118.         else # 文字傷害顏色描繪
  119.           bitmap.draw_text(-1, 12 - 1, 160, 36, damage, 1)
  120.           bitmap.draw_text(+1, 12 - 1, 160, 36, damage, 1)
  121.           bitmap.draw_text(-1, 12 + 1, 160, 36, damage, 1)
  122.           bitmap.draw_text(+1, 12 + 1, 160, 36, damage, 1)
  123.           bitmap.font.color = Sword56_Damage[damage].is_a?(Color) ? # 文字顏色
  124.           Sword56_Damage[damage] : Color.new(255, 255, 255)
  125.           bitmap.draw_text(0, 12, 160, 36, damage, 1)
  126.         end
  127.       end
  128.       if critical ; unless Sword56_Critical[1] # 會心一擊的場合 ; 圖片描繪會心一擊
  129.         bitmap1 = RPG::Cache.picture(Sword56_Critical[0])
  130.         rect = Rect.new(0, 0, bitmap1.width, bitmap1.height)
  131.         bitmap.blt((160 - rect.width) / 2, 0, bitmap1, rect)
  132.       else # 描繪會心一擊內容
  133.         bitmap.font.size = 20 ; bitmap.font.color = Sword56_Shadow
  134.         bitmap.draw_text(-1, -1, 160, 20, Sword56_Critical[0], 1)
  135.         bitmap.draw_text(+1, -1, 160, 20, Sword56_Critical[0], 1)
  136.         bitmap.draw_text(-1, +1, 160, 20, Sword56_Critical[0], 1)
  137.         bitmap.draw_text(+1, +1, 160, 20, Sword56_Critical[0], 1)
  138.         bitmap.font.color = Sword56_Critical[1]
  139.         bitmap.draw_text(0, 0, 160, 20, Sword56_Critical[0], 1)
  140.       end ; end
  141.       @damage_sprite56[i] = ::Sprite.new(self.viewport)
  142.       @damage_sprite56[i].bitmap = bitmap
  143.       @damage_sprite56[i].ox, @damage_sprite56[i].oy = 80, 45 + Sword56_Revise
  144.       @damage_sprite56[i].x, @damage_sprite56[i].y = self.x, self.y - self.oy / 2
  145.       @damage_sprite56[i].z = 3000
  146.       @_damage_about[i] = Sword56_Move[@damage_about] # 代入傷害移動類型
  147.       @damage_duration56[i] = Sword56_Move[@damage_about].size # 代入傷害移動時間
  148.     end
  149.     #-------------------------------------------------------------
  150.     #● 釋放傷害數值(第幾個傷害)
  151.     def dispose_damage(i = false)
  152.       (@damage_sprite56.each{|damage_sprite| damage_sprite.dispose if damage_sprite}
  153.       @damage_sprite56 = [] ; return) unless i # 釋放所有傷害的場合
  154.       return unless @damage_sprite56[i] # 無需釋放就中斷
  155.       @damage_sprite56[i].bitmap.dispose ; @damage_sprite56[i].dispose
  156.       @damage_sprite56[i], @damage_duration56[i] = nil, 0
  157.     end
  158.     #-------------------------------------------------------------
  159.     #● 更新畫面
  160.     alias sword56_update update unless $Sword_F12_Error[56]
  161.     def update
  162.       sword56_update
  163.       @damage_sprite56.each_index do |i| if @damage_duration56[i] > 0
  164.         @damage_duration56[i] -= 1
  165.         
  166.         xy = @_damage_about[i][-@damage_duration56[i]]
  167.         @damage_sprite56[i].x += xy[0] ; @damage_sprite56[i].y += xy[1]
  168.         
  169.         @damage_sprite56[i].opacity = 256 - (12 - @damage_duration56[i]) * 32
  170.         dispose_damage(i) if @damage_duration56[i] == 0
  171.       end ; end
  172.     end
  173.   end
  174.   #-------------------------------------------------------------
  175.   #● 判斷是否有傷害正在顯示
  176.   def damage? ; @damage_sprite56.size > 0 ; end
  177. end
  178. $Sword_F12_Error[56] = true # 腳本讀取完畢,打開F12除錯標誌功能
复制代码


作者: LOVE丶莫颜    时间: 2012-5-13 22:28
楼上的太麻烦了哦。表示我也看不懂,




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1