设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1320|回复: 1
打印 上一主题 下一主题

[已经解决] 多个伤害数值显示的问题再问

[复制链接]

Lv1.梦旅人

梦石
0
星屑
48
在线时间
2459 小时
注册时间
2011-12-18
帖子
1484
跳转到指定楼层
1
发表于 2012-3-27 19:40:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 a364774426 于 2012-3-28 10:43 编辑

有没有人知道横版里怎么同时显示多个伤害数值呢?比如多段攻击的时候会同时显示出每一次攻击的伤害,而不是下一个数值替换掉当前的一个。最具体的就是冒险岛那种

点评

感谢你的经验,请好好使用这脚本,把游戏做得更细致哦  发表于 2012-3-28 13:45
这是一个深不见底的坑,这是一个广袤无边的坑,我才刚刚放上了一抔泥土……

《六道·陈国篇》开坑了……↓点我

Lv1.梦旅人

梦石
0
星屑
50
在线时间
334 小时
注册时间
2011-10-21
帖子
413
2
发表于 2012-3-28 05:01:13 | 只看该作者
于是把STR的脚本改一改……丢上来了~
  1. #==============================================================================
  2. # ★RGSS2
  3. # STR11d_XP風バトル#ダメージポップアップ v2.2 09/07/25
  4. #
  5. # ・バトラーにダメージ・ステートの変化等のポップアップが
  6. #  出るようになります。
  7. # ・数字ポップアップに画像を使用することが出来ます。
  8. #  使用する数字グラフィックはSystemにインポートしてください。
  9. #
  10. #   <規格>
  11. #  並べ方 0123456789
  12. #    幅 = 数字一コマの幅 * 10
  13. #   高さ = 数字一コマの高さ * 5
  14. #  一列目に通常の数字
  15. #  ニ列目に回復用数字
  16. #  三列目にMPダメージ用数字
  17. #  四列目にクリティカル用数字 
  18. #  五列目にMP回復用数字 を配置します。
  19. #
  20. #------------------------------------------------------------------------------
  21. #
  22. # 更新履歴
  23. # ◇2.1a→2.2
  24. # 吸収時のポップアップの仕様を変更
  25. # (ダメージと回復を別々に表示させるようにした)
  26. # MP回復用のフォントカラーを設定
  27. # ・これに伴い、数字素材の規格が変更されました。ご注意。
  28. # ◇2.1→2.1a
  29. # HP吸収のポップアップ文字が間違っているミスを修正
  30. # ◇2.0→2.1
  31. # レベルアップ時にエラーが出るバグを修正
  32. # ◇1.2s→2.0
  33. # ★メジャーバージョンアップ
  34. # ポップアップスプライトの挙動をほぼ全て変更
  35. # →バウンド機能追加、設定箇所の簡略化
  36. # スリップダメージ/自動回復のポップアップに対応
  37. # 0ダメージがポップアップされない仕様は廃止になりました。
  38. #
  39. #==============================================================================
  40. class Scene_Battle < Scene_Base
  41.   # ■ポップアップテキスト定数
  42.   MISS = "Miss!"       # ミス
  43.   EVAD = "Evaded!"     # 回避
  44.   FAIL = "Failed!"     # 失敗
  45.   CRIT = "Critical!"   # クリティカル
  46.   MPDA = "MP-Damage"   # MPダメージ
  47.   MPRE = "MP-Recovery" # MP回復
  48.   V_MPDA = false # MPダメージのポップアップテキストを表示しない
  49.   V_MPRE = false # MP回復のポップアップテキストを表示しない
  50.   V_SLIP = false # スリップダメージ/自動回復をポップアップしない
  51.   V_EVAD = false # 回避をポップアップしない
  52.   V_FAIL = true  # 失敗をポップアップしない
  53.   V_STAT = false # ステートの変化をポップアップしない
  54. end
  55. class Sprite_PopUpText < Sprite
  56.   # ■サイズ
  57.   DMPP_FSIZE = 32  # ダメージポップアップのサイズ
  58.   TXPP_FSIZE = 20  # 文字ポップアップのサイズ
  59.   TXPP_SY    = 16  # 文字ポップアップのY座標修正
  60.   # ■数字1コマあたりのサイズ(pixel)
  61.   NW = 16  # 数字横幅 グラフィックを指定する場合は グラフィックの横幅 / 10
  62.   NH = 20  # 数字縦幅 グラフィックを指定する場合は グラフィックの縦幅 / 4
  63.   # ■数字グラフィックファイル名 指定しない場合は ""
  64.   FONTFILE = "Btskin_n00" # "Btskin_n02"
  65.   # ■フォント
  66.   FONT  = ["Arial Black"]                       # 数字フォント
  67.   TFONT = ["MS Pゴシック", "UmePlus Gothic"] # 文字フォント
  68.   # ■フォントカラー
  69.   # 通常                 中の色   /    縁の色
  70.   COLOR0 = [Color.new(255,255,255), Color.new(  0,  0,  0)]
  71.   # 回復
  72.   COLOR1 = [Color.new(128,255,192), Color.new(  0, 64,  0)]
  73.   # MPダメージ
  74.   COLOR2 = [Color.new(255,128,224), Color.new( 64,  0, 64)]
  75.   # クリティカル
  76.   COLOR3 = [Color.new(255,224,128), Color.new(192,  0,  0)]
  77.   # MP回復
  78.   COLOR4 = [Color.new(128,248,255), Color.new(  0,  0, 64)]
  79.   # ■動力
  80.   GRAV   = 0.5   # 重力(この値が高いほど早く落下する)
  81.   JUMP   = 4.0   # 上昇初速(この値が高いほど上に上がる)
  82.   BU_Y   = 48    # 縦バウンド位置(ポップアップ位置が基準)
  83.   BUND   = 5     # 縦バウンドさせる最大回数
  84.   LRMV   = 2     # 左右の移動のバラつき(ランダム)
  85.   LRBW   = true  # 画面左右端でバウンドする
  86.   M_OP   = 40    # 透明化開始フレーム数
  87.   OP_S   = 16    # 透明度変化スピード
  88. end
  89. #==============================================================================
  90. # ■ Bitmap
  91. #==============================================================================
  92. class Bitmap
  93.   #--------------------------------------------------------------------------
  94.   # ● 文字縁取り描画
  95.   #--------------------------------------------------------------------------
  96.   def draw_text_f(x, y, width, height, str, align = 0,
  97.                   color = Color.new(64,32,128))
  98.     shadow = self.font.shadow
  99.     b_color = self.font.color.dup
  100.     font.shadow = false
  101.     font.color = color
  102.     draw_text(x + 1, y, width, height, str, align)
  103.     draw_text(x - 1, y, width, height, str, align)
  104.     draw_text(x, y + 1, width, height, str, align)
  105.     draw_text(x, y - 1, width, height, str, align)
  106.     font.color = b_color
  107.     draw_text(x, y, width, height, str, align)
  108.     font.shadow = shadow
  109.   end
  110.   def draw_text_f_rect(r, str, align = 0, color = Color.new(64,32,128))
  111.     draw_text_f(r.x, r.y, r.width, r.height, str, align = 0, color)
  112.   end
  113. end
  114. #==============================================================================
  115. # ■ Sprite_PopUpText
  116. #==============================================================================
  117. class Sprite_PopUpText < Sprite
  118.   @@numcache = nil
  119.   #--------------------------------------------------------------------------
  120.   # ● オブジェクト初期化
  121.   #--------------------------------------------------------------------------
  122.   def initialize(x, y, pop = [""], flag = 0, delay = 0)
  123.     n_cache if @@numcache == nil
  124.     size = DMPP_FSIZE
  125.     # スプライト設定
  126.     super(nil)
  127.     self.bitmap = Bitmap.new(128, pop.size * (size + 4))
  128.     self.ox = self.bitmap.width / 2
  129.     self.oy = self.bitmap.height / 2
  130.     self.x = x
  131.     self.y = y - 56
  132.     self.z += 20
  133.     # フラグ 0 = 通常 1 = 回復 2 = MPダメージ 3 = クリティカル
  134.     case flag
  135.     when 0 ;color = COLOR0
  136.     when 1 ;color = COLOR1
  137.     when 2 ;color = COLOR2
  138.     when 3 ;color = COLOR3
  139.     when 4 ;color = COLOR4
  140.     end
  141.     # 描画
  142.     self.bitmap.font.color = color[0]
  143.     for i in 0...pop.size
  144.       if pop[i].is_a?(Numeric)
  145.         number(pop[i].abs, size * i, flag)
  146.       else
  147.         self.bitmap.font.name = TFONT
  148.         self.bitmap.font.size = TXPP_FSIZE
  149.         sy = TXPP_SY
  150.         h = TXPP_FSIZE
  151.         self.bitmap.draw_text_f(0, size * i + sy, 128, h, pop[i], 1, color[1])
  152.       end
  153.     end
  154.     # 動力設定
  155.     @delay = delay
  156.     @rx = self.x
  157.     @lrmove = (-LRMV * 10 + rand(LRMV*20+1))/10.0
  158.     @jump = JUMP
  159.     @yuka = self.y + BU_Y
  160.     @bound = BUND
  161.     @count = 0
  162.     self.visible = false if @delay > 0
  163.   end
  164.   #--------------------------------------------------------------------------
  165.   # ● 解放
  166.   #--------------------------------------------------------------------------
  167.   def dispose
  168.     self.bitmap.dispose if self.bitmap != nil
  169.     super
  170.   end
  171.   #--------------------------------------------------------------------------
  172.   # ● フレーム更新
  173.   #--------------------------------------------------------------------------
  174.   def update
  175.     if @delay > 0
  176.       @delay -= 1
  177.       return
  178.     end
  179.     self.visible = true
  180.     self.x = @rx;@rx += @lrmove
  181.     self.y -= @jump
  182.     @jump -= GRAV
  183.     self.opacity -= OP_S if @count >= M_OP
  184.     # 縦バウンド
  185.     if self.y >= @yuka
  186.       self.y = @yuka
  187.       if @bound > 0
  188.         @jump = -@jump / 3 * 2
  189.         @jump -= 1
  190.         @jump = @lrmove = 0 if @jump.truncate <= 1
  191.         @bound -= 1
  192.       else
  193.         @jump = @lrmove = 0
  194.       end
  195.     end
  196.     # 横バウンド
  197.     if LRBW
  198.       if @rx <= 0
  199.         @rx = 1
  200.         @lrmove = -@lrmove
  201.       elsif @rx >= 544
  202.         @rx = 543
  203.         @lrmove = -@lrmove
  204.       end
  205.     end
  206.     # 更新カウント加算
  207.     @count += 1
  208.     dispose if (self.opacity == 0)
  209.   end
  210.   #--------------------------------------------------------------------------
  211.   # ● 数字キャッシュ作成/確保
  212.   #--------------------------------------------------------------------------
  213.   def n_cache
  214.     if FONTFILE == ""
  215.       c = [COLOR0, COLOR1, COLOR2, COLOR3, COLOR4]
  216.       @@numcache = Bitmap.new(NW * 10, NH * 5)
  217.       @@numcache.font.size = NH
  218.       @@numcache.font.name = FONT
  219.       for f in 0...c.size
  220.         @@numcache.font.color = c[f][0]
  221.         fc = c[f][1]
  222.         for i in 0..9
  223.           @@numcache.draw_text_f(i * NW, f * NH, NW, NH, i, 1, fc)
  224.         end
  225.       end
  226.     else
  227.       @@numcache = Cache.system(FONTFILE)
  228.     end
  229.   end
  230.   #--------------------------------------------------------------------------
  231.   # ● 数字描画
  232.   #--------------------------------------------------------------------------
  233.   def number(n, y, c)
  234.     n = (n.to_s).split('')
  235.     for i in 0...n.size do n[i] = n[i].to_i end
  236.     x = (self.bitmap.width / 2) - ((NW * n.size) / 2)
  237.     rect = Rect.new(0 ,0, NW, NH)
  238.     rect.y = c * NH
  239.     for i in n
  240.       rect.x = i * NW
  241.       self.bitmap.blt(x, y, @@numcache, rect)
  242.       x += NW
  243.     end
  244.   end
  245. end
  246. #==============================================================================
  247. # ■ Game_Battler
  248. #==============================================================================
  249. class Game_Battler
  250.   #--------------------------------------------------------------------------
  251.   # ● 公開インスタンス変数
  252.   #--------------------------------------------------------------------------
  253.   def hppopup
  254.     @hppopup = [] if @hppopup == nil
  255.     @hppopup
  256.   end
  257.   def hppopup=(a)
  258.     @hppopup = a
  259.   end
  260.   #--------------------------------------------------------------------------
  261.   # ● オブジェクト初期化
  262.   #--------------------------------------------------------------------------
  263.   alias initialize_str11d initialize
  264.   def initialize
  265.     @hppopup = []
  266.     initialize_str11d
  267.   end
  268.   #--------------------------------------------------------------------------
  269.   # ● 行動効果の保持用変数をクリア
  270.   #--------------------------------------------------------------------------
  271.   alias clear_action_results_str11d clear_action_results
  272.   def clear_action_results
  273.     @hppopup = []
  274.     clear_action_results_str11d
  275.   end
  276.   #--------------------------------------------------------------------------
  277.   # ● スリップダメージの効果適用
  278.   #--------------------------------------------------------------------------
  279.   alias slip_damage_effect_str11d slip_damage_effect
  280.   def slip_damage_effect
  281.     ar_hp = self.hp
  282.     slip_damage_effect_str11d
  283.     @hppopup.push(ar_hp - self.hp) if ar_hp != self.hp
  284.   end
  285. end
  286. #==============================================================================
  287. # ■ Game_Actor
  288. #==============================================================================
  289. class Game_Actor < Game_Battler
  290.   #--------------------------------------------------------------------------
  291.   # ● 自動回復の実行 (ターン終了時に呼び出し)
  292.   #--------------------------------------------------------------------------
  293.   alias do_auto_recovery_str11d do_auto_recovery
  294.   def do_auto_recovery
  295.     ar_hp = self.hp
  296.     do_auto_recovery_str11d
  297.     @hppopup.push(ar_hp - self.hp) if ar_hp != self.hp
  298.   end
  299. end
  300. #==============================================================================
  301. # ■ Scene_Battle
  302. #==============================================================================
  303. class Scene_Battle < Scene_Base
  304.   #--------------------------------------------------------------------------
  305.   # ★ エイリアス
  306.   #--------------------------------------------------------------------------
  307.   alias start_str11d start
  308.   def start
  309.     @popup = []
  310.     start_str11d
  311.   end
  312.   alias terminate_str11d terminate
  313.   def terminate
  314.     for i in [email protected]
  315.       @popup[i].dispose if @popup[i] != nil
  316.     end
  317.     @popup = nil
  318.     terminate_str11d
  319.   end
  320.   alias update_basic_str11d update_basic
  321.   def update_basic(main = false)
  322.     update_basic_str11d(main)
  323.     for i in [email protected]
  324.       if @popup[i] != nil
  325.         @popup[i].update
  326.         @popup.delete_at(i) if @popup[i].disposed?
  327.       end
  328.     end
  329.   end
  330.   #--------------------------------------------------------------------------
  331.   # ● バトルイベントの処理
  332.   #--------------------------------------------------------------------------
  333.   alias process_battle_event_str11d process_battle_event
  334.   def process_battle_event
  335.     slippopup unless V_SLIP
  336.     process_battle_event_str11d
  337.   end
  338.   #--------------------------------------------------------------------------
  339.   # ● スリップダメージのポップアップ
  340.   #--------------------------------------------------------------------------
  341.   def slippopup
  342.     for i in $game_party.members + $game_troop.members
  343.       if i.hppopup.size > 0
  344.         for p in i.hppopup
  345.           array = [p]
  346.           @popup.push(Sprite_PopUpText.new(i.position_x, i.position_y, array))
  347.         end
  348.         i.hppopup.clear
  349.       end
  350.     end
  351.   end
  352.   #--------------------------------------------------------------------------
  353.   # ● ミスの表示
  354.   #--------------------------------------------------------------------------
  355.   alias display_miss_str11d display_miss
  356.   def display_miss(target, obj = nil)
  357.     t = target
  358.     tx = MISS
  359.     @popup.push(Sprite_PopUpText.new(t.position_x,t.position_y,[tx]))
  360.     display_miss_str11d(target, obj)
  361.   end
  362.   #--------------------------------------------------------------------------
  363.   # ● 回避の表示
  364.   #--------------------------------------------------------------------------
  365.   alias display_evasion_str11d display_evasion
  366.   def display_evasion(target, obj = nil)
  367.     unless V_EVAD
  368.       t = target
  369.       tx = EVAD
  370.       @popup.push(Sprite_PopUpText.new(t.position_x,t.position_y,[tx]))
  371.     end
  372.     display_evasion_str11d(target, obj)
  373.   end
  374.   
  375.   def pop_damage(target, obj, action)
  376.     index = @active_battler.index
  377.     actor = @active_battler.actor?
  378.     if obj != nil
  379.       # スキルやアイテムが吸収属性なら
  380.       absorb = absorb_attack(obj, target, index, actor) if obj.absorb_damage
  381.       action.push(true) if absorb == 0
  382.       # 拡張設定でダメージアクション禁止なら
  383.       action[2] = false if obj.extension.include?("NOOVERKILL")
  384.     end
  385.     # 対象のリアクション
  386.     @spriteset.set_damage_action(target.actor?, target.index, action)
  387.     display_damage(target, obj)
  388.   end
  389.   #--------------------------------------------------------------------------
  390.   # ● HP ダメージ表示
  391.   #--------------------------------------------------------------------------  
  392.   def display_hp_damage(target, obj = nil)
  393.     t = target
  394.     c = 0
  395.     if target.hp_damage == 0                # ノーダメージ
  396.       return if obj != nil and obj.damage_to_mp
  397.       return if obj != nil and obj.base_damage == 0
  398.       array = [t.hp_damage]
  399.       if target.critical
  400.         array.unshift(CRIT);c = 3
  401.       end
  402.       @popup.push(Sprite_PopUpText.new(t.position_x, t.position_y, array, c))
  403.     elsif target.absorbed                   # 吸収
  404.       array = [t.hp_damage]
  405.       n = t.hp_damage
  406.       c = (t.hp_damage >= 0 ? 0 : 1)
  407.       @popup.push(Sprite_PopUpText.new(t.position_x, t.position_y, array, c))
  408.       # 使用者の回復量を表示
  409.       t = @active_battler
  410.       array = [n]
  411.       c = (t.hp_damage >= 0 ? 1 : 0)
  412.       @popup.push(Sprite_PopUpText.new(t.position_x, t.position_y, array, c))
  413.     elsif target.hp_damage > 0              # ダメージ
  414.       array = [t.hp_damage]
  415.       if target.critical
  416.         array.unshift(CRIT);c = 3
  417.       end
  418.       @popup.push(Sprite_PopUpText.new(t.position_x, t.position_y, array, c))
  419.     else                                    # 回復
  420.       array = [t.hp_damage]
  421.       if target.critical
  422.         array.unshift(CRIT)
  423.       end
  424.       @popup.push(Sprite_PopUpText.new(t.position_x, t.position_y, array, 1))
  425.     end
  426.     # 呼び戻し
  427.   end
  428.   #--------------------------------------------------------------------------
  429.   # ● MP ダメージ表示
  430.   #--------------------------------------------------------------------------
  431.   def display_mp_damage(target, obj = nil)
  432.     return if target.dead?
  433.     return if target.mp_damage == 0
  434.     t = target
  435.     if target.absorbed                      # 吸収
  436.       array = [t.mp_damage]
  437.       n = t.mp_damage
  438.       if t.mp_damage >= 0
  439.         c = 2 ; array.unshift(MPDA) unless V_MPDA
  440.       else
  441.         c = 4 ; array.unshift(MPRE) unless V_MPRE
  442.       end
  443.       @popup.push(Sprite_PopUpText.new(t.position_x, t.position_y, array, c))
  444.       t = @active_battler
  445.       array = [n]
  446.       if t.mp_damage >= 0
  447.         c = 4 ; array.unshift(MPRE) unless V_MPRE
  448.       else
  449.         c = 2 ; array.unshift(MPDA) unless V_MPDA
  450.       end
  451.       @popup.push(Sprite_PopUpText.new(t.position_x, t.position_y, array, c))
  452.     elsif target.mp_damage > 0              # ダメージ
  453.       array = [t.mp_damage]
  454.       array.unshift(MPDA) unless V_MPDA
  455.       @popup.push(Sprite_PopUpText.new(t.position_x, t.position_y, array, 2))
  456.     else                                    # 回復
  457.       array = [t.mp_damage]
  458.       array.unshift(MPRE) unless V_MPRE
  459.       @popup.push(Sprite_PopUpText.new(t.position_x, t.position_y, array, 4))
  460.     end
  461.     # 呼び戻し
  462.   end
  463.   #--------------------------------------------------------------------------
  464.   # ● 付加されたステートの表示
  465.   #--------------------------------------------------------------------------
  466.   def display_added_states(target, obj = nil)
  467.     unless V_STAT
  468.       t = target
  469.       tx = ""
  470.       delay = 0
  471.       for state in t.added_states
  472.         tx = state.name if state.id != 1
  473.         @popup.push(Sprite_PopUpText.new(t.position_x,t.position_y,[tx], 0, delay))
  474.         delay += 24
  475.       end
  476.     end
  477.     # 呼び戻し
  478.   end
  479.   #--------------------------------------------------------------------------
  480.   # ● 解除されたステートの表示
  481.   #--------------------------------------------------------------------------
  482.   def display_removed_states(target, obj = nil)
  483.     unless V_STAT
  484.       t = target
  485.       delay = 0
  486.       for state in t.removed_states
  487.         tx = state.name
  488.         @popup.push(Sprite_PopUpText.new(t.position_x,t.position_y,[tx], 1, delay))
  489.         delay += 24
  490.       end
  491.     end
  492.     # 呼び戻し
  493.   end
  494.   #--------------------------------------------------------------------------
  495.   # ● 失敗の表示
  496.   #--------------------------------------------------------------------------
  497.   def display_failure(target, obj)
  498.     unless V_FAIL
  499.       t = target
  500.       tx = FAIL
  501.       @popup.push(Sprite_PopUpText.new(t.position_x,t.position_y,[tx]))
  502.     end
  503.     # 呼び戻し
  504.   end
  505. end
复制代码

点评

我决定多给阁下经验  发表于 2012-3-28 10:43
我是活着的死人哦
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

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

GMT+8, 2024-12-26 11:17

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表