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

Project1

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

[已经过期] 有關橫版 總傷害的顯示寬度~

[复制链接]

Lv1.梦旅人

梦石
0
星屑
65
在线时间
141 小时
注册时间
2012-4-29
帖子
54
跳转到指定楼层
1
发表于 2016-11-14 23:19:34 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 RyanBern 于 2016-11-15 10:07 编辑

各位前輩好,我用了一個橫版戰鬥的腳本,裡面也有包括傷害美化跟連擊顯示,但今天發現造成傷害後,會有個總傷害


的顯示,但是總傷害只能顯示到99999也就是5位數,我測試一下,讓傷害變成6位數後第1個數字會被切掉 == ....


後來改狠狠多次腳本,也改了圖片大小試試,都沒用...圖片大小改小它直接不顯示第6位數= =








這是腳本裡的總傷害那段,第750行...但怎麼改都一樣有前輩能幫忙嗎?


RUBY 代码复制
  1. # ● 总伤害处理
  2. #--------------------------------------------------------------------------
  3. def make_total_damage(value)
  4. if value.is_a?(Numeric) and SHOW_TOTAL_DAMAGE > 0
  5. @_total_damage += value
  6. # 绝对值转为字符串
  7. damage_string = @_total_damage.abs.to_s
  8. else
  9. return
  10. end
  11. # 初始化位图
  12. bitmap = Bitmap.new(350, 150)
  13. bitmap.font.name = "Arial Black"
  14. bitmap.font.size = 32
  15. # 伤害值是数值的情况下
  16. if value.is_a?(Numeric)
  17. # 分割伤害值字符串
  18. damage_array = damage_string.scan(/./)
  19. damage_x = 40 - damage_string.size * 9
  20. # 伤害值为负的情况下
  21. name=RPG::Cache.picture("total_damage")
  22. # 循环伤害值字符串
  23. for char in damage_array
  24. number = char.to_i
  25. # 显示伤害数字
  26. bitmap.blt(damage_x, 0, name,
  27. Rect.new(number * name.width/10, 0, name.width/10, name.height))
  28. #################################################################总伤害数值
  29. damage_x += name.width/10 - 3 #间距缩小3个像素,可以自行调整
  30. #################################################################总伤害数值
  31. end
  32. end


這是腳本:

RUBY 代码复制
  1. #==============================================================================
  2. # 本脚本来自[url]www.66RPG.com[/url],使用和转载请保留此信息
  3. #
  4. # ■ 熊式横版战斗 by 弗雷德   真移位:神思
  5. #==============================================================================
  6. #如果要需要Game_Battler3类的攻击、特技、物品的方法,请移至161-470行
  7. #因为重写过这三个方法,在原方法里改是不会生效的。
  8.  
  9.  
  10.  
  11.  
  12.  
  13. #--------------------------------------------------------------------------
  14. #  ● 设定开始
  15. #--------------------------------------------------------------------------
  16. #伤害为0的时候是否显示无效文字,1为显示,0为不显示。
  17. INVALIDSWITCH = 1
  18.  
  19. # 是否显示死亡图 1为显示,0为不显示。
  20. DEADPIC = 1
  21.  
  22. # 是否显示总伤害 1为显示,0为不显示。
  23. SHOW_TOTAL_DAMAGE = 1
  24.  
  25. # 是否显示连击数值 1为显示,0为不显示。
  26. HITSWITCH = 1
  27.  
  28. # 是否显示SP伤害数值 1为显示,0为不显示。
  29. SDMGSWITCH = 1
  30.  
  31. # 不是主状态的时候是否稍稍降低点透明度  1为降低,0为不降低
  32. NACTSWITCH = 0
  33.  
  34. # 会心一击时的音效,不设置为不使用音效。
  35. CRIVOICE = "Critital_hit"
  36.  
  37. # 会心一击是否开启画面晃动 1为开启,0为关闭
  38. CRISHAKE = 1
  39.  
  40. # 会心一击是否开启画面闪烁,1为开启,0为关闭
  41. CRIFLASH = 1
  42.  
  43. # 攻击时不移动的属性编号 默认为29号 参考数据库的设置
  44. # 比如职业枪兵勾上了29号属性,那么当枪兵使用普通攻击时将不会移动。技能也是如此。
  45. UNMOVE = 29
  46.  
  47. # 攻击到与敌人同一水平线前的属性编号 默认为30号 参考数据库的设置
  48. HOMOVE = 30
  49.  
  50. ##################################################################
  51. module Scene_BattleName
  52.   # 设定移动速度
  53.   Move_Duration = 28
  54.   #设定人物的单帧图,如果不做设定,将直接使用默认的战斗图。
  55.   BattlerName = {
  56. "佛雷德" => {
  57.   "待机" => ["Fred_s1","Fred_s2","Fred_s3","Fred_s4"],
  58.   "移动" => ["Fred_r1","Fred_r2","Fred_r3","Fred_r4"],
  59.   "返回" => ["Fred_b1","Fred_b2","Fred_b3","Fred_b4"],
  60.   "受伤" => ["Fred_h"],
  61.   "防御" => ["Fred_d"],
  62.   "死亡" => ["Fred_die1","Fred_die2"]
  63.   },
  64.  
  65.   "女法師" => {
  66.   "待机" => ["01-1","01-2","01-3","01-4"],
  67.   "移动" => ["01-1"],
  68.   "返回" => ["01-5"],
  69.   "受伤" => ["01-7"],
  70.   "防御" => ["01-1"],
  71.   "死亡" => ["01-6"]
  72.   },
  73.  
  74.   "大熊" => {
  75.   "待机" => ["bear_s11","bear_s12","bear_s13","bear_s14"],
  76.   "移动" => ["bear_b1","bear_b2","bear_b3","bear_b4"],
  77.   "返回" => ["bear_r1","bear_r2","bear_r3","bear_r4"],
  78.   "受伤" => ["bear_h1"],
  79.   "防御" => ["bear_d1"],
  80.   "死亡" => ["bear_die11","bear_die12"]
  81.   },
  82.  
  83.   "蜘蛛" => {
  84.   "待机" => ["011","012","012","011"],
  85.   "移动" => ["011"],
  86.   "返回" => ["011"],
  87.   "受伤" => ["011"],
  88.   "防御" => ["011"],
  89.   "死亡" => ["015"]
  90.   },
  91.  
  92.   "鬼幽靈" => {
  93.   "待机" => ["ghost_s11","ghost_s12","ghost_s13","ghost_s14"],
  94.   "移动" => ["ghost_b1","ghost_b2","ghost_b3","ghost_b4"],
  95.   "返回" => ["ghost_r1","ghost_r2","ghost_r3","ghost_r4"],
  96.   "受伤" => ["ghost_h1"],
  97.   "防御" => ["ghost_d1"],
  98.   "死亡" => ["ghost_die11","ghost_die12"]
  99.   },
  100.  
  101.    "惡佛雷德" => {
  102.   "待机" => ["Fred_s11","Fred_s12","Fred_s13","Fred_s14"],
  103.   "移动" => ["Fred_b1","Fred_b2","Fred_b3","Fred_b4"],
  104.   "返回" => ["Fred_r1","Fred_r2","Fred_r3","Fred_r4"],
  105.   "受伤" => ["Fred_h1"],
  106.   "防御" => ["Fred_d1"],
  107.   "死亡" => ["Fred_die11","Fred_die12"]
  108.   },
  109.  
  110.   "惡熊" => {
  111.   "待机" => ["bear_s1","bear_s2","bear_s3","bear_s4"],
  112.   "移动" => ["bear_r1","bear_r2","bear_r3","bear_r4"],
  113.   "返回" => ["bear_b1","bear_b2","bear_b3","bear_b4"],
  114.   "受伤" => ["bear_h"],
  115.   "防御" => ["bear_d"],
  116.   "死亡" => ["bear_die1","bear_die2"]
  117.   },
  118.  
  119.   "惡蜘蛛" => {
  120.   "待机" => ["monster01","monster02","monster03","monster04"],
  121.   "移动" => ["monster01"],
  122.   "返回" => ["monster05"],
  123.   "受伤" => ["monster01"],
  124.   "防御" => ["monster01"],
  125.   "死亡" => ["spider_die1","spider_die2"]
  126.   },
  127.  
  128.   "巨大鬼幽靈" => {
  129.   "待机" => ["ghost_s1","ghost_s2","ghost_s3","ghost_s4"],
  130.   "移动" => ["ghost_r1","ghost_r2","ghost_r3","ghost_r4"],
  131.   "返回" => ["ghost_b1","ghost_b2","ghost_b3","ghost_b4"],
  132.   "受伤" => ["ghost_h"],
  133.   "防御" => ["ghost_d"],
  134.   "死亡" => ["ghost_die1","ghost_die2"]
  135.   },
  136. }
  137. end
  138. #至于其它的:
  139.  
  140. #HP伤害数字间距偏移在602行修改。
  141.  
  142. #SP伤害数字间距偏移在667行修改。
  143.  
  144. #连击数字间距偏移在713行修改。
  145.  
  146. #总伤害数字间距偏移在759行修改。
  147.  
  148. #--------------------------------------------------------------------------
  149. #  ● 设定结束
  150. #--------------------------------------------------------------------------
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161. class Game_Battler
  162.   attr_accessor :movex                    # X坐标修正
  163.   attr_accessor :movey                    # Y坐标修正
  164.   attr_accessor :startactive              # 行为
  165.   attr_accessor :damage_sp                # 精神伤害值
  166.   alias bearrpg_initialize initialize
  167.   def initialize
  168.     bearrpg_initialize
  169.     @damage_sp = 0
  170.     @movex = 0
  171.     @movey = 0
  172.     @startactive = "待机"
  173.   end
  174.   def width #获取战斗图宽
  175.     return RPG::Cache.battler(@battler_name, @battler_hue).width
  176.   end
  177.   def height #获取战斗图高
  178.     return RPG::Cache.battler(@battler_name, @battler_hue).height
  179.   end
  180.   #--------------------------------------------------------------------------
  181.   # ● 应用通常攻击效果
  182.   #     attacker : 攻击者 (battler)
  183.   #--------------------------------------------------------------------------
  184.   def attack_effect(attacker)
  185.     # 清除会心一击标志
  186.     self.critical = false
  187.     #######伤害开关初始化##################################################bearrpg
  188.     $damage_hp = false
  189.     $damage_sp = false
  190.     # 第一命中判定
  191.     hit_result = (rand(100) < attacker.hit)
  192.     # 命中的情况下
  193.     if hit_result == true
  194.       # 计算基本伤害
  195.       atk = [attacker.atk - self.pdef / 2, 0].max
  196.       self.damage = atk * (20 + attacker.str) / 20
  197.       # 属性修正
  198.       self.damage *= elements_correct(attacker.element_set)
  199.       self.damage /= 100
  200.       # 伤害符号正确的情况下
  201.       if self.damage > 0
  202.         # 会心一击修正
  203.         if rand(100) < 4 * attacker.dex / self.agi
  204.           self.damage *= 2
  205.           self.critical = true
  206.         end
  207.         # 防御修正
  208.         if self.guarding?
  209.           self.damage /= 2
  210.         end
  211.       end
  212.       $damage_hp = true if self.damage.is_a?(Numeric)
  213.     #  $damage_sp = true if self.damage_sp != 0 SP伤害数值开关
  214.       # 分散
  215.       if self.damage.abs > 0
  216.         amp = [self.damage.abs * 15 / 100, 1].max
  217.         self.damage += rand(amp+1) + rand(amp+1) - amp
  218.       end
  219.       # 第二命中判定
  220.       eva = 8 * self.agi / attacker.dex + self.eva
  221.       hit = self.damage < 0 ? 100 : 100 - eva
  222.       hit = self.cant_evade? ? 100 : hit
  223.       hit_result = (rand(100) < hit)
  224.     end
  225.     #####################################bearrpg
  226.     # 命中的情况下
  227.     if hit_result == true
  228.       # 状态冲击解除
  229.       remove_states_shock
  230.       # HP 的伤害计算
  231.       self.hp -= self.damage
  232.       # 状态变化
  233.       @state_changed = false
  234.       states_plus(attacker.plus_state_set)
  235.       states_minus(attacker.minus_state_set)
  236.       if self.damage == 0
  237.            self.damage = "无效" if INVALIDSWITCH >0
  238.          self.critical = false
  239.        end
  240.     # Miss 的情况下
  241.     else
  242.       # 伤害设置为 "Miss"
  243.       self.damage = "Miss"
  244.       # 清除会心一击标志
  245.       self.critical = false
  246.     end
  247.     # 过程结束
  248.     return true
  249.   end
  250.   #############################################bearrpg
  251.   #--------------------------------------------------------------------------
  252.   # ● 应用特技效果
  253.   #     user  : 特技的使用者 (battler)
  254.   #     skill : 特技
  255.   #--------------------------------------------------------------------------
  256.   def skill_effect(user, skill)
  257.     #######伤害开关初始化##################################################bearrpg
  258.     $damage_hp = false
  259.     $damage_sp = false
  260.     # 清除会心一击标志
  261.     self.critical = false
  262.     # 特技的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
  263.     # 或者特技的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
  264.     if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
  265.        ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
  266.       # 过程结束
  267.       return false
  268.     end
  269.     # 清除有效标志
  270.     effective = false
  271.     # 公共事件 ID 是有效的情况下,设置为有效标志
  272.     effective |= skill.common_event_id > 0
  273.     # 第一命中判定
  274.     hit = skill.hit
  275.     if skill.atk_f > 0
  276.       hit *= user.hit / 100
  277.     end
  278.     hit_result = (rand(100) < hit)
  279.     # 不确定的特技的情况下设置为有效标志
  280.     effective |= hit < 100
  281.     # 命中的情况下
  282.     if hit_result == true
  283.       # 计算威力
  284.       power = skill.power + user.atk * skill.atk_f / 100
  285.       if power > 0
  286.         power -= self.pdef * skill.pdef_f / 200
  287.         power -= self.mdef * skill.mdef_f / 200
  288.         power = [power, 0].max
  289.       end
  290.       # 计算倍率
  291.       rate = 20
  292.       rate += (user.str * skill.str_f / 100)
  293.       rate += (user.dex * skill.dex_f / 100)
  294.       rate += (user.agi * skill.agi_f / 100)
  295.       rate += (user.int * skill.int_f / 100)
  296.       # 计算基本伤害
  297.       self.damage = power * rate / 20
  298.       # 属性修正
  299.       self.damage *= elements_correct(skill.element_set)
  300.       self.damage /= 100
  301.       # 伤害符号正确的情况下
  302.       if self.damage > 0
  303.         # 防御修正
  304.         if self.guarding?
  305.           self.damage /= 2
  306.         end
  307.       end
  308.       # 分散
  309.       if skill.variance > 0 and self.damage.abs > 0
  310.         amp = [self.damage.abs * skill.variance / 100, 1].max
  311.         self.damage += rand(amp+1) + rand(amp+1) - amp
  312.       end
  313.       # 第二命中判定
  314.       eva = 8 * self.agi / user.dex + self.eva
  315.       hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
  316.       hit = self.cant_evade? ? 100 : hit
  317.       hit_result = (rand(100) < hit)
  318.       # 不确定的特技的情况下设置为有效标志
  319.       effective |= hit < 100
  320.     end
  321.     $damage_hp = true if self.damage.is_a?(Numeric)
  322.    # $damage_sp = true if self.damage_sp != 0 SP伤害数值开关
  323.     # 命中的情况下
  324.     if hit_result == true
  325.       # 威力 0 以外的物理攻击的情况下
  326.       if skill.power != 0 and skill.atk_f > 0
  327.         # 状态冲击解除
  328.         remove_states_shock
  329.         # 设置有效标志
  330.         effective = true
  331.       end
  332.       # HP 的伤害减法运算
  333.       last_hp = self.hp
  334.       self.hp -= self.damage
  335.       effective |= self.hp != last_hp
  336.       # 状态变化
  337.       @state_changed = false
  338.       effective |= states_plus(skill.plus_state_set)
  339.       effective |= states_minus(skill.minus_state_set)
  340.       #############################################bearrpg
  341.       # 威力为 0 的场合
  342.       if skill.power == 0
  343.         # 伤害设置为空的字串
  344.         self.damage = ""
  345.         # 状态没有变化的情况下
  346.         unless @state_changed
  347.           # 伤害设置为 "Miss"
  348.           self.damage = "Miss"
  349.         end
  350.       elsif self.damage == 0
  351.         unless @state_changed
  352.            self.damage = "无效" if INVALIDSWITCH >0
  353.          else
  354.           self.damage = ""
  355.         end
  356.       end
  357.     # Miss 的情况下
  358.     else
  359.       # 伤害设置为 "Miss"
  360.       self.damage = "Miss"
  361.     end
  362.     # 不在战斗中的情况下
  363.     unless $game_temp.in_battle
  364.       # 伤害设置为 nil
  365.       self.damage = nil
  366.     end
  367.     # 过程结束
  368.     return effective
  369.   end
  370.   #############################################bearrpg
  371.   #--------------------------------------------------------------------------
  372.   # ● 应用物品效果
  373.   #     item : 物品
  374.   #--------------------------------------------------------------------------
  375.   def item_effect(item)
  376.     # 清除会心一击标志
  377.     self.critical = false
  378.     # 物品的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
  379.     # 或者物品的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
  380.     if ((item.scope == 3 or item.scope == 4) and self.hp == 0) or
  381.        ((item.scope == 5 or item.scope == 6) and self.hp >= 1)
  382.       # 过程结束
  383.       return false
  384.     end
  385.     # 清除有效标志
  386.     effective = false
  387.     # 公共事件 ID 是有效的情况下,设置为有效标志
  388.     effective |= item.common_event_id > 0
  389.     # 命中判定
  390.     hit_result = (rand(100) < item.hit)
  391.     # 不确定的特技的情况下设置为有效标志
  392.     effective |= item.hit < 100
  393.     # 命中的情况
  394.     if hit_result == true
  395.       # 计算回复量
  396.       recover_hp = maxhp * item.recover_hp_rate / 100 + item.recover_hp
  397.       recover_sp = maxsp * item.recover_sp_rate / 100 + item.recover_sp
  398.       if recover_hp < 0
  399.         recover_hp += self.pdef * item.pdef_f / 20
  400.         recover_hp += self.mdef * item.mdef_f / 20
  401.         recover_hp = [recover_hp, 0].min
  402.       end
  403.       # 属性修正
  404.       recover_hp *= elements_correct(item.element_set)
  405.       recover_hp /= 100
  406.       recover_sp *= elements_correct(item.element_set)
  407.       recover_sp /= 100
  408.       # 分散
  409.       if item.variance > 0 and recover_hp.abs > 0
  410.         amp = [recover_hp.abs * item.variance / 100, 1].max
  411.         recover_hp += rand(amp+1) + rand(amp+1) - amp
  412.       end
  413.       if item.variance > 0 and recover_sp.abs > 0
  414.         amp = [recover_sp.abs * item.variance / 100, 1].max
  415.         recover_sp += rand(amp+1) + rand(amp+1) - amp
  416.       end
  417.       # 回复量符号为负的情况下
  418.       if recover_hp < 0
  419.         # 防御修正
  420.         if self.guarding?
  421.           recover_hp /= 2
  422.         end
  423.       end
  424.       # HP 回复量符号的反转、设置伤害值
  425.       self.damage = -recover_hp
  426.       self.damage_sp = -recover_sp  
  427.       # HP 以及 SP 的回复
  428.       last_hp = self.hp
  429.       last_sp = self.sp
  430.       self.hp += recover_hp
  431.       self.sp += recover_sp
  432.       ###################################################################bearrpg
  433.       $damage_hp = true if self.damage.is_a?(Numeric)
  434.       $damage_sp = true if self.damage_sp.is_a?(Numeric) and recover_sp != 0
  435.       ###################################################################bearrpg
  436.       effective |= self.hp != last_hp
  437.       effective |= self.sp != last_sp
  438.       # 状态变化
  439.       @state_changed = false
  440.       effective |= states_plus(item.plus_state_set)
  441.       effective |= states_minus(item.minus_state_set)
  442.       # 能力上升值有效的情况下
  443.       if item.parameter_type > 0 and item.parameter_points != 0
  444.         # 能力值的分支
  445.         case item.parameter_type
  446.         when 1  # MaxHP
  447.           @maxhp_plus += item.parameter_points
  448.         when 2  # MaxSP
  449.           @maxsp_plus += item.parameter_points
  450.         when 3  # 力量
  451.           @str_plus += item.parameter_points
  452.         when 4  # 灵巧
  453.           @dex_plus += item.parameter_points
  454.         when 5  # 速度
  455.           @agi_plus += item.parameter_points
  456.         when 6  # 魔力
  457.           @int_plus += item.parameter_points
  458.         end
  459.         # 设置有效标志
  460.         effective = true
  461.       end
  462.       # HP 回复率与回复量为 0 的情况下
  463.       if item.recover_hp_rate == 0 and item.recover_hp == 0
  464.         # 设置伤害为空的字符串
  465.         self.damage = ""
  466.         # SP 回复率与回复量为 0、能力上升值无效的情况下
  467.         if item.recover_sp_rate == 0 and item.recover_sp == 0 and
  468.            (item.parameter_type == 0 or item.parameter_points == 0)
  469.           # 状态没有变化的情况下
  470.           unless @state_changed
  471.             # 伤害设置为 "Miss"
  472.             self.damage = "Miss"
  473.           end
  474.         end
  475.       end
  476.     # Miss 的情况下
  477.     else
  478.       # 伤害设置为 "Miss"
  479.       self.damage = "Miss"
  480.     end
  481.     # 不在战斗中的情况下
  482.     unless $game_temp.in_battle
  483.       # 伤害设置为 nil
  484.       self.damage = nil
  485.     end
  486.     # 过程结束
  487.     return effective
  488.   end
  489. end
  490.  
  491. class Game_Actor
  492.   def screen_x
  493.     if self.index != nil
  494.       return (640-self.index*50)/2 + 240 + @movex
  495.     else
  496.       return 0
  497.     end
  498.   end
  499.   def screen_y
  500.     return self.index*70+self.height/2 + 55 + @movey #(320-self.index*91+self.height)/2 + 100 + @movey
  501.   end
  502.   def screen_z
  503.     return self.screen_y-self.index * 10
  504.   end
  505. end
  506. class Game_Enemy
  507.   def screen_x
  508.     return $data_troops[@troop_id].members[@member_index].x + @movex
  509.   end
  510.   def screen_y
  511.     return $data_troops[@troop_id].members[@member_index].y + @movey
  512.   end
  513.   def screen_z
  514.     return self.screen_y#+self.height
  515.   end
  516. end
  517.  
  518. class Sprite_Battler
  519.   include Scene_BattleName
  520. end
  521. module RPG
  522. class Sprite < ::Sprite
  523. #==========================================
  524. def initialize(viewport = nil)
  525. super(viewport)
  526. @_whiten_duration = 0
  527. @_appear_duration = 0
  528. @_escape_duration = 0
  529. @_collapse_duration = 0
  530. @_damage_duration = 0
  531. @_animation_duration = 0
  532. @_blink = false  
  533. @flash_shake = 0
  534. @_damage = []  
  535. @_damage_sp = []
  536. @_total_damage = 0
  537. @_total_damage_duration = 0
  538. @p_dam=0
  539. @hits=0
  540. end
  541. def animation_set_sprites(sprites, cell_data, position)
  542.    for i in 0..15
  543.    sprite = sprites[i]
  544.    pattern = cell_data[i, 0]
  545.    if sprite == nil or pattern == nil or pattern == -1
  546.      sprite.visible = false if sprite != nil
  547.      next
  548.    end
  549.    sprite.visible = true
  550.    sprite.src_rect.set(pattern % 5 * 192, pattern / 5 * 192, 192, 192)
  551.    if position == 3
  552.      if self.viewport != nil
  553.        sprite.x = self.viewport.rect.width / 2
  554.        sprite.y = self.viewport.rect.height - 160
  555.      else
  556.        sprite.x = 320
  557.        sprite.y = 240
  558.      end
  559.      else
  560.      sprite.x = self.x - self.ox + self.src_rect.width / 2
  561.      sprite.y = self.y - self.oy + self.src_rect.height / 2
  562.      sprite.y -= self.src_rect.height / 4 if position == 0
  563.      sprite.y += self.src_rect.height / 4 if position == 2
  564.    end
  565.    sprite.x += cell_data[i, 1]
  566.    sprite.y += cell_data[i, 2]
  567.    if $scene.is_a?(Scene_Battle)
  568.    sprite.z = battler.screen_z+20
  569. else
  570.    sprite.z = 9990
  571.    end
  572.    sprite.ox = 96
  573.    sprite.oy = 96
  574.    sprite.zoom_x = cell_data[i, 3] / 100.0
  575.    sprite.zoom_y = cell_data[i, 3] / 100.0
  576.    sprite.angle = cell_data[i, 4]
  577.    sprite.mirror = (cell_data[i, 5] == 1)
  578.    sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
  579.    sprite.blend_type = cell_data[i, 7]
  580.    end
  581. end
  582. def damage(value, critical)
  583.   dispose_hit
  584.     if value.is_a?(Numeric)
  585.       damage_string = value.abs.to_s
  586.     else
  587.       damage_string = value.to_s
  588.     end
  589.     bitmap = Bitmap.new(300, 150)
  590.     bitmap.font.name = ["黑体","华文行楷", "宋体"]
  591.     bitmap.font.size = 32
  592.     if value.is_a?(Numeric)
  593.   # 分割伤害值字符串
  594.       damage_array = damage_string.scan(/./)
  595.       damage_x = 81 - damage_string.size * 9
  596.   # 会心一击标志打开的情况
  597.       if critical and value != "无效"
  598.   # 显示会心一击图画
  599.         cri_bitmap = RPG::Cache.picture("Critital")
  600.         bitmap.blt(damage_x+cri_bitmap.width, cri_bitmap.height*2, cri_bitmap, Rect.new(0, 0, cri_bitmap.width, cri_bitmap.height))
  601.         Audio.se_play("Audio/SE/"+CRIVOICE,100,100) if CRIVOICE != nil and CRIVOICE != ""
  602.         $game_screen.start_flash(Color.new(255, 5, 5, 155), 5) if CRIFLASH >0
  603.         $game_screen.start_shake(2,9,3) if CRISHAKE >0
  604.       end
  605.   # 伤害值为负的情况下
  606.     dmg_bitmap = RPG::Cache.picture("Normal_Damage")
  607.       if value < 0
  608.   # 调用回复数字表
  609.         bitmap.blt(damage_x-14, 32,dmg_bitmap,Rect.new(dmg_bitmap.width/12*10, 0, dmg_bitmap.width/12, dmg_bitmap.height/2))
  610.       else
  611.   # 调用伤害数字表
  612.         bitmap.blt(damage_x-14, 32, dmg_bitmap,Rect.new(dmg_bitmap.width/12*11, 0, dmg_bitmap.width/12, dmg_bitmap.height/2))
  613.       end
  614.   # 循环伤害值字符串
  615.       for char in damage_array
  616.         number = char.to_i
  617.   # 显示伤害数字
  618.         bitmap.blt(damage_x, 32, dmg_bitmap,
  619.         Rect.new(number * dmg_bitmap.width/12, 0, dmg_bitmap.width/12, dmg_bitmap.height/2))
  620. #################################################################普通伤害数值
  621.         damage_x += dmg_bitmap.width/12 - 4#间距缩小4个像素,可以自行调整
  622. #################################################################普通伤害数值
  623.       end  
  624.     else
  625.       if value == "Miss"
  626.         miss_dmg = RPG::Cache.picture("miss")
  627.         bitmap.blt(miss_dmg.width, 0,miss_dmg, Rect.new(0, 0, miss_dmg.width, miss_dmg.height))
  628.       elsif value == "无效"
  629.         invalid_dmg = RPG::Cache.picture("invalid")
  630.         bitmap.blt(invalid_dmg.width, 0,invalid_dmg, Rect.new(0, 0, invalid_dmg.width,invalid_dmg.height))
  631.       #end
  632.       end
  633.     end
  634. # 伤害值定位
  635.     @_damage_sprite = ::Sprite.new(self.viewport)
  636.     @_damage_sprite.bitmap = bitmap
  637.     @_damage_sprite.ox = 80
  638.     @_damage_sprite.oy = 20
  639.     @_damage_sprite.x = self.x
  640.     @_damage_sprite.y = self.y - self.oy / 2
  641.     @_damage_sprite.z = 3000
  642.     @_damage_duration = 40
  643.     @_damage.push([@_damage_sprite,@_damage_duration-10,0, rand(30) - 15, rand(3)])
  644.     make_total_damage(value)
  645.   end
  646. ##################################################################sp伤害数值
  647. def damage_sp(value, critical)
  648.   dispose_hit
  649.     if value.is_a?(Numeric)
  650.       damage_string = value.abs.to_s
  651.     else
  652.       damage_string = value.to_s
  653.     end
  654.     bitmap = Bitmap.new(300, 150)
  655.     bitmap.font.name = ["黑体","华文行楷", "宋体"]
  656.     bitmap.font.size = 32
  657.     if value.is_a?(Numeric)
  658.   # 分割伤害值字符串
  659.       damage_array = damage_string.scan(/./)
  660.       damage_x = 81 - damage_string.size * 9
  661.   # 会心一击标志打开的情况
  662.       if critical and value != "无效"
  663.   # 显示会心一击图画
  664.         cri_bitmap = RPG::Cache.picture("Critital")
  665.         bitmap.blt(damage_x+cri_bitmap.width, cri_bitmap.height*2, cri_bitmap, Rect.new(0, 0, cri_bitmap.width, cri_bitmap.height))
  666.         Audio.se_play("Audio/SE/"+CRIVOICE,100,100) if CRIVOICE != nil and CRIVOICE != ""
  667.         $game_screen.start_flash(Color.new(255, 5, 5, 155), 5) if CRIFLASH >0
  668.         $game_screen.start_shake(2,9,3) if CRISHAKE >0
  669.       end
  670.   # 伤害值为负的情况下
  671.     dmg_bitmap = RPG::Cache.picture("Normal_Damage")
  672.       if value < 0
  673.   # 调用回复数字表
  674.         bitmap.blt(damage_x-14, 32,dmg_bitmap,Rect.new(dmg_bitmap.width/12*10, dmg_bitmap.height/2, dmg_bitmap.width/12, dmg_bitmap.height/2))
  675.       else
  676.   # 调用伤害数字表
  677.         bitmap.blt(damage_x-14, 32, dmg_bitmap,Rect.new(dmg_bitmap.width/12*11, dmg_bitmap.height/2, dmg_bitmap.width/12, dmg_bitmap.height/2))
  678.       end
  679.   # 循环伤害值字符串
  680.       for char in damage_array
  681.         number = char.to_i
  682.   # 显示伤害数字
  683.         bitmap.blt(damage_x, 32, dmg_bitmap,
  684.         Rect.new(number * dmg_bitmap.width/12, dmg_bitmap.height/2, dmg_bitmap.width/12, dmg_bitmap.height/2))
  685. #################################################################普通伤害数值
  686.         damage_x += dmg_bitmap.width/12 - 4#间距缩小4个像素,可以自行调整
  687. #################################################################普通伤害数值
  688.       end  
  689.     else
  690.       if value == "Miss"
  691.         miss_dmg = RPG::Cache.picture("miss")
  692.         bitmap.blt(miss_dmg.width, 0,miss_dmg, Rect.new(0, 0, miss_dmg.width, miss_dmg.height))
  693.       elsif value == "无效"
  694.         invalid_dmg = RPG::Cache.picture("invalid")
  695.         bitmap.blt(invalid_dmg.width, 0,invalid_dmg, Rect.new(0, 0, invalid_dmg.width,invalid_dmg.height))
  696.       #end
  697.       end
  698.     end
  699. # 伤害值定位
  700.     @_damage_sprite = ::Sprite.new(self.viewport)
  701.     @_damage_sprite.bitmap = bitmap
  702.     @_damage_sprite.ox = 80
  703.     @_damage_sprite.oy = 20
  704.     @_damage_sprite.x = self.x
  705.     @_damage_sprite.y = self.y - self.oy / 2
  706.     @_damage_sprite.z = 3000
  707.     @_damage_duration = 40
  708.     @_damage_sp.push([@_damage_sprite,@_damage_duration-10,0, rand(30) - 15, rand(3)])
  709.    # make_total_damage(value)
  710.   end  
  711. def hit
  712. # 如果伤害值是数值
  713. # 转为字符串
  714. value=@hits
  715. hits_string = value.to_s
  716. # 初始化位图
  717. bitmap = Bitmap.new(320, 64)
  718. bitmap.font.name = "Arial Black"
  719. bitmap.font.size = 32
  720. # 分割伤害值字符串
  721. hits_array = hits_string.scan(/./)
  722. hits_x = 81 - hits_string.size * 18.1
  723. rect_y = 0
  724. # 循环伤害值字符串
  725. for char in hits_array
  726. number = char.to_i
  727. # 显示伤害数字
  728. combo_num = RPG::Cache.picture("combo_num")
  729. bitmap.blt(hits_x, 0, combo_num,
  730. Rect.new(number * combo_num.width/10, 0, combo_num.width/10, combo_num.height))
  731. #################################################################连击数数值
  732. hits_x += combo_num.width/10 - 3#间距缩小3个像素,可以自行调整
  733. #################################################################连击数数值
  734. end
  735. combo_tx = RPG::Cache.picture("combo_text")
  736. bitmap.blt(hits_x, 0,combo_tx ,
  737. Rect.new(0, 0, combo_tx.width, combo_tx.height))
  738. # 伤害值定位
  739. @_hits_sprite = ::Sprite.new(self.viewport)
  740. @_hits_sprite.bitmap = bitmap
  741. @_hits_sprite.ox = 81
  742. @_hits_sprite.oy = 20
  743. @_hits_sprite.x = 500
  744. @_hits_sprite.y = 100
  745. @_hits_sprite.opacity = HITSWITCH > 0 ? 255 : 0
  746. @_hits_sprite.z = 3000
  747. @_hits_duration = 40
  748. end
  749. #--------------------------------------------------------------------------
  750. # ● 总伤害处理
  751. #--------------------------------------------------------------------------
  752. def make_total_damage(value)
  753. if value.is_a?(Numeric) and SHOW_TOTAL_DAMAGE > 0
  754. @_total_damage += value
  755. # 绝对值转为字符串
  756. damage_string = @_total_damage.abs.to_s
  757. else
  758. return
  759. end
  760. # 初始化位图
  761. bitmap = Bitmap.new(350, 150)
  762. bitmap.font.name = "Arial Black"
  763. bitmap.font.size = 32
  764. # 伤害值是数值的情况下
  765. if value.is_a?(Numeric)
  766. # 分割伤害值字符串
  767. damage_array = damage_string.scan(/./)
  768. damage_x = 40 - damage_string.size * 9
  769. # 伤害值为负的情况下
  770. name=RPG::Cache.picture("total_damage")
  771. # 循环伤害值字符串
  772. for char in damage_array
  773. number = char.to_i
  774. # 显示伤害数字
  775. bitmap.blt(damage_x, 0, name,
  776. Rect.new(number * name.width/10, 0, name.width/10, name.height))
  777. #################################################################总伤害数值
  778. damage_x += name.width/10 - 3 #间距缩小3个像素,可以自行调整
  779. #################################################################总伤害数值
  780. end
  781. end
  782. if @_total_damage_sprite.nil?
  783. @_total_damage_sprite = ::Sprite.new(self.viewport)
  784. @_total_damage_sprite.ox = 80
  785. @_total_damage_sprite.oy = 40
  786. @_total_damage_sprite.z = 3000
  787. end
  788. @_total_damage_sprite.bitmap = bitmap
  789. @_total_damage_sprite.zoom_x = 1.0
  790. @_total_damage_sprite.zoom_y = 1.0
  791. @_total_damage_sprite.x = self.x
  792. @_total_damage_sprite.y = self.y - self.oy / 2
  793. @_total_damage_sprite.z = 3001
  794. @_total_damage_duration = 80
  795. #hit数描绘
  796. @hits+=1
  797. if @_total_damage > 0
  798.   hit
  799. end
  800. end
  801. def animation(animation, hit, battler_damage="", battler_damage_sp="",battler_critical=false)
  802. dispose_animation
  803. @battler_damage = battler_damage
  804. @battler_damage_sp = battler_damage_sp
  805. @battler_critical = battler_critical
  806. @_animation = animation
  807. return if @_animation == nil
  808. @_animation_hit = hit
  809. @_animation_duration = @_animation.frame_max
  810. animation_name = @_animation.animation_name
  811. animation_hue = @_animation.animation_hue
  812. bitmap = RPG::Cache.animation(animation_name, animation_hue)
  813. for timing in @_animation.timings
  814. quanzhong = animation_process_timing(timing, @_animation_hit,true)
  815. @all_quanzhong += quanzhong
  816. @_last_frame = timing.frame if quanzhong != 0
  817. end
  818. if @@_reference_count.include?(bitmap)
  819. @@_reference_count[bitmap] += 1
  820. else
  821. @@_reference_count[bitmap] = 1
  822. end  
  823. if $scene.is_a?(Scene_Battle)
  824. if $scene.animation1_id == @battler.animation_id
  825. @battler_damage = ""
  826. @battler_damage_sp = ""
  827. end
  828. end
  829. @_animation_sprites = []
  830. if @_animation.position != 3 or not @@_animations.include?(animation)
  831. for i in 0..15
  832. sprite = ::Sprite.new(self.viewport)
  833. sprite.bitmap = bitmap
  834. sprite.visible = false
  835. @_animation_sprites.push(sprite)
  836. end
  837. unless @@_animations.include?(animation)
  838. @@_animations.push(animation)
  839. end
  840. end
  841. update_animation
  842. end  
  843. def dispose_damage
  844. for damage in @_damage.reverse
  845. damage[0].bitmap.dispose
  846. damage[0].dispose
  847. @_damage.delete(damage)
  848. end
  849. for damage_sp in @_damage_sp.reverse
  850. damage_sp[0].bitmap.dispose
  851. damage_sp[0].dispose
  852. @_damage_sp.delete(damage_sp)
  853. end
  854. @_total_damage = 0
  855. @_last_frame = -1
  856. if @_total_damage_sprite != nil
  857. @_total_damage_duration = 0
  858. @_total_damage_sprite.bitmap.dispose
  859. @_total_damage_sprite.dispose
  860. @_total_damage_sprite = nil
  861. end
  862. end
  863. def dispose_hit
  864. if @_hits_sprite != nil
  865. @_hits_sprite.bitmap.dispose
  866. @_hits_sprite.dispose
  867. @_hits_sprite = nil
  868. end
  869. end
  870. def dispose_animation
  871. @battler_damage = nil
  872. @battler_damage_sp = nil
  873. @battler_critical = nil
  874. @all_quanzhong = 1
  875. @_total_damage = 0
  876. @_last_frame = -1
  877. if @_animation_sprites != nil
  878. sprite = @_animation_sprites[0]
  879. if sprite != nil
  880. @@_reference_count[sprite.bitmap] -= 1
  881. if @@_reference_count[sprite.bitmap] == 0
  882. sprite.bitmap.dispose
  883. end
  884. end
  885. for sprite in @_animation_sprites
  886. sprite.dispose
  887. end
  888. @_animation_sprites = nil
  889. @_animation = nil
  890. end
  891. end
  892. def update
  893. super
  894. if @_whiten_duration > 0
  895. @_whiten_duration -= 1
  896. self.color.alpha = 128 - (16 - @_whiten_duration) * 10
  897. end
  898. if @_appear_duration > 0
  899. @_appear_duration -= 1
  900. self.opacity = (16 - @_appear_duration) * 16
  901. end
  902. if @_escape_duration > 0
  903. @_escape_duration -= 1
  904. self.opacity = 256 - (32 - @_escape_duration) * 10
  905. end
  906. if @_collapse_duration > 0
  907. @_collapse_duration -= 1
  908. self.opacity = 256 - (48 - @_collapse_duration) * 6
  909. end
  910. if @_damage_duration > 0
  911. @_damage_duration -= 1
  912. for damage in @_damage
  913. damage[0].x = self.x + self.viewport.rect.x -
  914. self.ox + self.src_rect.width / 2 +
  915. (40 - damage[1]) * damage[3] / 10
  916. damage[0].y -= damage[4]+damage[1]/10
  917. damage[0].opacity = damage[1]*20
  918. damage[1] -= 1
  919. if damage[1]==0
  920. damage[0].bitmap.dispose
  921. damage[0].dispose
  922. @_damage.delete(damage)
  923. next
  924. end
  925. end
  926. for damage_sp in @_damage_sp
  927. damage_sp[0].x = self.x + self.viewport.rect.x -
  928. self.ox + self.src_rect.width / 2 +
  929. (40 - damage_sp[1]) * damage_sp[3] / 10
  930. damage_sp[0].y -= damage_sp[4]+damage_sp[1]/10
  931. damage_sp[0].opacity = damage_sp[1]*20
  932. damage_sp[1] -= 1
  933. if damage_sp[1]==0
  934. damage_sp[0].bitmap.dispose
  935. damage_sp[0].dispose
  936. @_damage_sp.delete(damage_sp)
  937. next
  938. end
  939. end
  940. end
  941. if @_total_damage_duration > 0
  942. @_total_damage_duration -= 1
  943. @_total_damage_sprite.y -= 1 if @_total_damage_duration % 2 == 0
  944. if @_total_damage_sprite.zoom_x > 1.0
  945. @_total_damage_sprite.zoom_x -= 0.05
  946. end
  947. if @_total_damage_sprite.zoom_y > 1.0
  948. @_total_damage_sprite.zoom_y -= 0.05
  949. end
  950. @_total_damage_sprite.opacity = 256 - (24 - @_total_damage_duration) * 16
  951. if @_total_damage_duration <= 0
  952. dispose_hit
  953. @_total_damage = 0
  954. @_total_damage_duration = 0
  955. @_total_damage_sprite.bitmap.dispose
  956. @_total_damage_sprite.dispose
  957. @_total_damage_sprite = nil
  958. end
  959. end
  960. #=======================================
  961.     if @_animation != nil and (Graphics.frame_count % 2 == 0)
  962.       @_animation_duration -= 1
  963.       update_animation
  964.     end
  965.   if @_loop_animation != nil and (Graphics.frame_count % 2 == 0)
  966.       update_loop_animation
  967.       @_loop_animation_index += 1
  968.       @_loop_animation_index %= @_loop_animation.frame_max
  969.     end
  970.   if @_blink
  971.     @_blink_count = (@_blink_count + 1) % 32
  972.       if @_blink_count < 16
  973.         alpha = (16 - @_blink_count) * 6
  974.       else
  975.         alpha = (@_blink_count - 16) * 6
  976.       end
  977.       self.color.set(255, 255, 255, alpha)
  978.     end
  979.     @@_animations.clear
  980.   end
  981. def update_animation
  982.   if @_animation_duration > 0
  983.     frame_index = @_animation.frame_max - @_animation_duration
  984.     cell_data = @_animation.frames[frame_index].cell_data
  985.     position = @_animation.position
  986.     animation_set_sprites(@_animation_sprites, cell_data, position)
  987.       for timing in @_animation.timings
  988.         if timing.frame == frame_index
  989.           t = 1.0 * animation_process_timing(timing, @_animation_hit)
  990.           ts = 1.0 * animation_process_timing(timing, @_animation_hit)
  991.           if timing.se.name != ""
  992.             se=timing.se
  993.             Audio.se_play("Audio/SE/" + se.name, se.volume, se.pitch)
  994.           end
  995.           if @battler_damage.is_a?(Numeric) and t != 0
  996.             if @battler.guarding?
  997.               @battler.startactive = "防御" if @battler_damage > 0
  998.            else
  999.               @battler.startactive = "受伤" if @battler_damage > 0
  1000.             end
  1001.             t *= @battler_damage
  1002.             t /= @all_quanzhong
  1003.             ts *= @battler_damage_sp
  1004.             ts /= @all_quanzhong
  1005.             t = t.to_i
  1006.             ts = ts.to_i
  1007.   if frame_index != @_last_frame
  1008.     @p_dam+= t
  1009.   end
  1010.       if frame_index == @_last_frame
  1011.         t=@battler_damage-@p_dam
  1012.       end
  1013.     if frame_index == @_last_frame
  1014.       @_total_damage = @battler_damage - t
  1015.       @p_dam=0
  1016.     end
  1017.       damage(t,@battler_critical) if $damage_hp == true
  1018.       damage_sp(ts,@battler_critical) if $damage_sp == true
  1019.     if frame_index == @_last_frame
  1020.       @hits=0
  1021.      end
  1022.       elsif !@battler_damage.is_a?(Numeric) and timing.flash_scope != 0
  1023.         damage(@battler_damage,@battler_critical)
  1024.         damage_sp(@battler_damage_sp,@battler_critical) if $damage_sp == true
  1025.        end
  1026.       end
  1027.       end
  1028.     else
  1029.       dispose_animation
  1030.     end
  1031.   end
  1032. def animation_process_timing(timing, hit,dontflash=false)
  1033.   if (timing.condition == 0) or
  1034.     (timing.condition == 1 and hit == true) or
  1035.     (timing.condition == 2 and hit == false)
  1036.   case timing.flash_scope
  1037.     when 1
  1038.       unless dontflash
  1039.         self.flash(timing.flash_color, timing.flash_duration * 2)
  1040.         if @_total_damage >0
  1041.           @flash_shake_switch = true
  1042.           @flash_shake = 10
  1043.         end
  1044.       end
  1045.       return timing.flash_color.alpha * timing.flash_duration
  1046.     when 2
  1047.       unless dontflash
  1048.         if self.viewport != nil
  1049.           self.viewport.flash(timing.flash_color, timing.flash_duration * 2)
  1050.         end
  1051.       end
  1052.       return timing.flash_color.alpha * timing.flash_duration
  1053.     when 3
  1054.       unless dontflash
  1055.         self.flash(nil, timing.flash_duration * 2)
  1056.       end
  1057.         return timing.flash_color.alpha * timing.flash_duration
  1058.       end
  1059.     end
  1060.       return 0
  1061.     end
  1062.   end
  1063. end
  1064.  
  1065. class Sprite_Battler < RPG::Sprite
  1066.   def initialize(viewport, battler = nil)
  1067.     super(viewport)
  1068.     @battler = battler
  1069.     @battler_visible = false
  1070.     @flash_shake_switch = true
  1071.     @number = 0#初始化编号
  1072.   end
  1073.   def update
  1074.     super
  1075.     # 战斗者为 nil 的情况下
  1076.     if @battler == nil
  1077.       self.bitmap = nil
  1078.       loop_animation(nil)
  1079.       return
  1080.     end
  1081.     # 文件名和色相与当前情况有差异的情况下
  1082.     if @battler.battler_name != @battler_name or
  1083.        @battler.battler_hue != @battler_hue
  1084.       # 获取、设置位图
  1085.       @battler_name = @battler.battler_name
  1086.       @battler_hue = @battler.battler_hue
  1087.       self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
  1088.       @width = bitmap.width
  1089.       @height = bitmap.height
  1090.       self.ox = @width / 2
  1091.       self.oy = @height
  1092.       # 如果是战斗不能或者是隐藏状态就把透明度设置成 0
  1093.       if @battler.dead? or @battler.hidden
  1094.         self.opacity = 0  if DEADPIC != 1
  1095.       end
  1096.     end
  1097.     ###################################万兽熊最高#########################################
  1098.         if @battler.startactive == "移动" or @battler.startactive == "返回"
  1099.       if Graphics.frame_count % 4 == 0
  1100.         unless BattlerName[@battler.name].nil?
  1101.           @number = (@number + 1) % BattlerName[@battler.name][@battler.startactive].size
  1102.           self.bitmap = RPG::Cache.battler(BattlerName[@battler.name][@battler.startactive][@number], @battler_hue)
  1103.         end
  1104.       end
  1105.     elsif @battler.startactive == "死亡"
  1106.        if Graphics.frame_count % 4 == 0
  1107.         unless BattlerName[@battler.name].nil?
  1108.           if @number +1 <= BattlerName[@battler.name][@battler.startactive].size
  1109.           self.bitmap = RPG::Cache.battler(BattlerName[@battler.name][@battler.startactive][@number], @battler_hue)
  1110.           @number += 1
  1111.         else
  1112.           self.bitmap = RPG::Cache.battler(BattlerName[@battler.name][@battler.startactive][BattlerName[@battler.name][@battler.startactive].size-1], @battler_hue)
  1113.           end
  1114.         end
  1115.       end
  1116.       else
  1117.       if Graphics.frame_count % 10 == 0
  1118.         unless BattlerName[@battler.name].nil?
  1119.           @number = (@number + 1) % BattlerName[@battler.name][@battler.startactive].size
  1120.           self.bitmap = RPG::Cache.battler(BattlerName[@battler.name][@battler.startactive][@number], @battler_hue)
  1121.         end
  1122.       end
  1123.     end
  1124.     #######################################################################################
  1125.     # 动画 ID 与当前的情况有差异的情况下
  1126.     if @battler.damage == nil and
  1127.        @battler.state_animation_id != @state_animation_id
  1128.       @state_animation_id = @battler.state_animation_id
  1129.       loop_animation($data_animations[@state_animation_id])
  1130.     end
  1131.     # 应该被显示的角色的情况下
  1132.    if NACTSWITCH > 0
  1133.     if @battler.is_a?(Game_Actor) and @battler_visible
  1134.       # 不是主状态的时候稍稍降低点透明度
  1135.       if $game_temp.battle_main_phase
  1136.         self.opacity += 3 if self.opacity < 255
  1137.       else
  1138.         self.opacity -= 3 if self.opacity > 207
  1139.       end
  1140.     end
  1141.   end
  1142.     if @battler.blink
  1143.       blink_on
  1144.     else
  1145.       blink_off
  1146.     end
  1147.     unless @battler_visible
  1148.       if not @battler.hidden and not @battler.dead? and
  1149.          (@battler.damage == nil or @battler.damage_pop)
  1150.         appear
  1151.         @battler_visible = true
  1152.       end
  1153.     end
  1154.     if @battler_visible
  1155.       if @battler.hidden
  1156.         $game_system.se_play($data_system.escape_se)
  1157.         escape
  1158.         @battler_visible = false
  1159.       end
  1160.       if @battler.white_flash
  1161.         whiten
  1162.         @battler.white_flash = false   
  1163.       end
  1164.         if @battler.animation_id != 0
  1165.         animation = $data_animations[@battler.animation_id]
  1166.         animation(animation, @battler.animation_hit,@battler.damage,@battler.damage_sp, @battler.critical)
  1167.         @battler.animation_id = 0
  1168.       end
  1169.       if @battler.damage_pop
  1170.         @battler.damage = nil
  1171.         @battler.damage_sp = 0
  1172.         @battler.critical = false
  1173.         @battler.damage_pop = false
  1174.       end
  1175.       if @battler.damage == nil and @battler.dead?
  1176.         if DEADPIC >0
  1177.           @battler.startactive = "死亡"
  1178.           else
  1179.         if @battler.is_a?(Game_Enemy)
  1180.           $game_system.se_play($data_system.enemy_collapse_se)
  1181.         else
  1182.           $game_system.se_play($data_system.actor_collapse_se)
  1183.         end
  1184.         collapse
  1185.         @battler_visible = false
  1186.         end
  1187.       end
  1188.     end
  1189.      self.x = @battler.screen_x
  1190.      self.y = @battler.screen_y
  1191.      self.z = @battler.screen_z
  1192.   end
  1193. end
  1194.  
  1195. class Spriteset_Battle
  1196. alias bearrpg_initialize initialize
  1197.   def initialize
  1198.     @enemy_sprites = []
  1199.     for enemy in $game_troop.enemies.reverse
  1200.       #####修改敌人显示端口,与角色一样。
  1201.       @enemy_sprites.push(Sprite_Battler.new(@viewport2, enemy))
  1202.     end
  1203.     bearrpg_initialize
  1204.   end
  1205. end
  1206.  
  1207. class Arrow_Enemy < Arrow_Base
  1208.   def update
  1209.     super
  1210.     $game_troop.enemies.size.times do
  1211.       break if self.enemy.exist?
  1212.       @index += 1
  1213.       @index %= $game_troop.enemies.size
  1214.     end
  1215.     if Input.repeat?(Input::UP)
  1216.       $game_system.se_play($data_system.cursor_se)
  1217.       $game_troop.enemies.size.times do
  1218.         @index += 1
  1219.         @index %= $game_troop.enemies.size
  1220.         break if self.enemy.exist?
  1221.       end
  1222.     end
  1223.     if Input.repeat?(Input::DOWN)
  1224.       $game_system.se_play($data_system.cursor_se)
  1225.       $game_troop.enemies.size.times do
  1226.         @index += $game_troop.enemies.size - 1
  1227.         @index %= $game_troop.enemies.size
  1228.         break if self.enemy.exist?
  1229.       end
  1230.     end
  1231.     if self.enemy != nil
  1232.       self.x = self.enemy.screen_x
  1233.       self.y = self.enemy.screen_y
  1234.     end
  1235.   end
  1236. end
  1237.  
  1238. class Arrow_Actor < Arrow_Base
  1239.   def update
  1240.     super
  1241.     if Input.repeat?(Input::UP)
  1242.       $game_system.se_play($data_system.cursor_se)
  1243.       @index += 1
  1244.       @index %= $game_party.actors.size
  1245.     end
  1246.     if Input.repeat?(Input::DOWN)
  1247.       $game_system.se_play($data_system.cursor_se)
  1248.       @index += $game_party.actors.size - 1
  1249.       @index %= $game_party.actors.size
  1250.     end
  1251.     if self.actor != nil
  1252.       self.x = self.actor.screen_x
  1253.       self.y = self.actor.screen_y
  1254.     end
  1255.   end
  1256. end
  1257.  
  1258. class Scene_Battle
  1259. include Scene_BattleName
  1260. attr_reader :animation1_id
  1261.   def main
  1262.     $game_temp.in_battle = true
  1263.     $game_temp.battle_turn = 0
  1264.     $game_temp.battle_event_flags.clear
  1265.     $game_temp.battle_abort = false
  1266.     $game_temp.battle_main_phase = false
  1267.     $game_temp.battleback_name = $game_map.battleback_name
  1268.     $game_temp.forcing_battler = nil
  1269.     @_move_duration = 0
  1270.     $game_system.battle_interpreter.setup(nil, 0)
  1271.     @troop_id = $game_temp.battle_troop_id
  1272.     $game_troop.setup(@troop_id)
  1273.     s1 = $data_system.words.attack
  1274.     s2 = $data_system.words.skill
  1275.     s3 = $data_system.words.guard
  1276.     s4 = $data_system.words.item
  1277.     @actor_command_window = Window_Command.new(160, [s1, s2, s3, s4])
  1278.     @actor_command_window.z = 900
  1279.     @actor_command_window.y = 160
  1280.     @actor_command_window.back_opacity = 160
  1281.     @actor_command_window.active = false
  1282.     @actor_command_window.visible = false
  1283.     @party_command_window = Window_PartyCommand.new
  1284.     @party_command_window.z = 910
  1285.     @help_window = Window_Help.new
  1286.     @help_window.back_opacity = 160
  1287.     @help_window.z = 920
  1288.     @help_window.visible = false
  1289.     @status_window = Window_BattleStatus.new
  1290.     @status_window.z = 930
  1291.     @message_window = Window_Message.new
  1292.     @message_window.z = 940
  1293.     @spriteset = Spriteset_Battle.new
  1294.     @wait_count = 0
  1295.     if $data_system.battle_transition == ""
  1296.       Graphics.transition(20)
  1297.     else
  1298.       Graphics.transition(40, "Graphics/Transitions/" +
  1299.         $data_system.battle_transition)
  1300.     end
  1301.     start_phase1
  1302.     loop do
  1303.       Graphics.update
  1304.       Input.update
  1305.       update
  1306.       if $scene != self
  1307.         break
  1308.       end
  1309.     end
  1310.     $game_map.refresh
  1311.     Graphics.freeze
  1312.     @actor_command_window.dispose
  1313.     @party_command_window.dispose
  1314.     @help_window.dispose
  1315.     @status_window.dispose
  1316.     @message_window.dispose
  1317.     if @skill_window != nil
  1318.       @skill_window.dispose
  1319.     end
  1320.     if @item_window != nil
  1321.       @item_window.dispose
  1322.     end
  1323.     if @result_window != nil
  1324.       @result_window.dispose
  1325.     end
  1326.     @spriteset.dispose
  1327.     if $scene.is_a?(Scene_Title)
  1328.       Graphics.transition
  1329.       Graphics.freeze
  1330.     end
  1331.     if $BTEST and not $scene.is_a?(Scene_Gameover)
  1332.       $scene = nil
  1333.     end
  1334.   end
  1335.   def start_phase1
  1336.     # 转移到回合 1
  1337.     @phase = 1
  1338.     # 清除全体同伴的行动
  1339.     $game_party.clear_actions
  1340.     for actor in $game_party.actors
  1341.      actor.startactive = actor.hp>0? "待机" : "死亡"
  1342.     end
  1343.     # 设置战斗事件
  1344.     setup_battle_event
  1345.   end
  1346.   alias bearrpg_start_phase5 start_phase5
  1347. def start_phase5
  1348.    bearrpg_start_phase5
  1349.     @result_window.z = 999
  1350.     @phase5_wait_count = 100
  1351.   end
  1352.   def start_enemy_select
  1353.     @enemy_arrow = Arrow_Enemy.new(@spriteset.viewport2)
  1354.     @enemy_arrow.help_window = @help_window
  1355.     @actor_command_window.active = false
  1356.     @actor_command_window.visible = false
  1357.   end
  1358.   alias bearrpg_start_skill_select start_skill_select
  1359.    def start_skill_select
  1360.       bearrpg_start_skill_select
  1361.       @skill_window.z = 999
  1362.     end
  1363.    alias bearrpg_start_item_select start_item_select
  1364.     def start_item_select
  1365.       bearrpg_start_item_select
  1366.       @item_window.z = 999
  1367.     end
  1368.   def move(active_battler, target, ox, oy, 返回标记 = false)
  1369.     ta_x = target[0]
  1370.     ta_y = target[1]
  1371.     if 返回标记
  1372.       active_battler.movex = (active_battler.movex * (@_move_duration - 1) + ta_x.to_f - ox) / @_move_duration
  1373.       active_battler.movey = (active_battler.movey * (@_move_duration - 1) + ta_y.to_f - oy) / @_move_duration
  1374.     else
  1375.       if @active_battler.is_a?(Game_Enemy)
  1376.         active_battler.movex = (active_battler.movex * (@_move_duration - 1) + ta_x.to_f - ox ) / @_move_duration
  1377.         active_battler.movey = (active_battler.movey * (@_move_duration - 1) + ta_y.to_f - oy ) / @_move_duration
  1378.       else
  1379.         active_battler.movex =  (active_battler.movex * (@_move_duration - 1) + ta_x.to_f - ox ) / @_move_duration
  1380.         active_battler.movey = (active_battler.movey * (@_move_duration - 1) + ta_y.to_f - oy ) / @_move_duration
  1381.       end
  1382.     end
  1383.   end
  1384.   def update_phase4_step3
  1385.     ####普通攻击的场合############################################################
  1386.     if @active_battler.current_action.basic == 0 and
  1387.       @active_battler.current_action.kind == 0
  1388.       #开始执行移动
  1389.      if not @active_battler.element_rate(UNMOVE)>100# 如果属性“不移动”不大于100
  1390.         @active_battler.startactive = "移动"
  1391.         @oldxy = [@active_battler.screen_x,@active_battler.screen_y]
  1392.         ox,oy = @active_battler.screen_x,@active_battler.screen_y
  1393.       if @active_battler.element_rate(HOMOVE)>100# 如果属性“半距离”大于100
  1394.         @_move_duration = Move_Duration/2
  1395.        while @_move_duration > 0
  1396.         Graphics.update
  1397.         Input.update
  1398.         @spriteset.update
  1399.         if @target_battlers[0].is_a?(Game_Actor)
  1400.         tag = [@target_battlers[0].screen_x-@target_battlers[0].width-(@target_battlers[0].screen_x-ox).abs/2.abs,@target_battlers[0].screen_y+1]
  1401.         else
  1402.         tag = [(@target_battlers[0].screen_x+@target_battlers[0].width/1.5)+(@target_battlers[0].screen_x-ox).abs/2,@target_battlers[0].screen_y+2]
  1403.         end
  1404.         move(@active_battler, tag, ox, oy)
  1405.         @_move_duration -= 1
  1406.       end
  1407.     else
  1408.       @_move_duration = Move_Duration
  1409.         while @_move_duration > 0
  1410.         Graphics.update
  1411.         Input.update
  1412.         @spriteset.update
  1413.         if @target_battlers[0].is_a?(Game_Actor)
  1414.         tag = [@target_battlers[0].screen_x-@target_battlers[0].width/2,@target_battlers[0].screen_y+1]
  1415.         else
  1416.         tag = [@target_battlers[0].screen_x+@target_battlers[0].width/1.5,@target_battlers[0].screen_y+2]
  1417.         end
  1418.         move(@active_battler, tag, ox, oy)
  1419.         @_move_duration -= 1
  1420.       end
  1421.       end
  1422.     end
  1423.    ####普通攻击的场合############################################################
  1424.     elsif @active_battler.current_action.kind == 1
  1425.     ####使用特技的场合############################################################
  1426.       if not @skill.element_set.include?(UNMOVE)# 如果技能不包含“不移动属性”
  1427.         @active_battler.startactive = "移动"
  1428.         @oldxy = [@active_battler.screen_x,@active_battler.screen_y]
  1429.         ox,oy = @active_battler.screen_x,@active_battler.screen_y
  1430.       if @skill.element_set.include?(HOMOVE)#如果技能不包含“半距离”属性
  1431.         @_move_duration = Move_Duration/2
  1432.        while @_move_duration > 0
  1433.         Graphics.update
  1434.         Input.update
  1435.         @spriteset.update
  1436.         if @target_battlers[0].is_a?(Game_Actor)
  1437.         tag = [@target_battlers[0].screen_x-@target_battlers[0].width-(@target_battlers[0].screen_x-ox).abs/2.abs,@target_battlers[0].screen_y+1]
  1438.         else
  1439.         tag = [(@target_battlers[0].screen_x+@target_battlers[0].width/1.5)+(@target_battlers[0].screen_x-ox).abs/2,@target_battlers[0].screen_y+2]
  1440.         end
  1441.         move(@active_battler, tag, ox, oy)
  1442.         @_move_duration -= 1
  1443.       end
  1444.     else
  1445.       @_move_duration = Move_Duration
  1446.         while @_move_duration > 0
  1447.         Graphics.update
  1448.         Input.update
  1449.         @spriteset.update
  1450.         if @target_battlers[0].is_a?(Game_Actor)
  1451.         tag = [@target_battlers[0].screen_x-@target_battlers[0].width,@target_battlers[0].screen_y+1]
  1452.         else
  1453.         tag = [@target_battlers[0].screen_x+@target_battlers[0].width/1.5,@target_battlers[0].screen_y+2]
  1454.         end
  1455.         move(@active_battler, tag, ox, oy)
  1456.         @_move_duration -= 1
  1457.       end
  1458.       end
  1459.     end
  1460.    #####使用特技的场合##############################################################
  1461. end
  1462. if @active_battler.startactive != "防御"
  1463.     @active_battler.startactive = "待机"
  1464.    end
  1465.     # 行动方动画 (ID 为 0 的情况下是白色闪烁)
  1466.     if @animation1_id == 0
  1467.       @active_battler.white_flash = true
  1468.     else
  1469.       @active_battler.animation_id = @animation1_id
  1470.       @active_battler.animation_hit = true
  1471.     end
  1472.     for target in @target_battlers
  1473.       if target.guarding? and target.damage.is_a?(Numeric)
  1474.         target.startactive = "防御" if target.damage > 0
  1475.         end
  1476.       target.animation_id = @animation2_id
  1477.       target.animation_hit = (target.damage != "Miss")
  1478.     end
  1479.     # 移至步骤 4
  1480.     @phase4_step = 4
  1481.   end
  1482.   ##############################################################################
  1483.   def update_phase4_step4
  1484.    ###########################万兽熊最高########################################
  1485.     # 对像方动画
  1486.      for target in @target_battlers
  1487.        if target.damage != nil
  1488.          target.damage_pop = true
  1489.        end
  1490.      end
  1491.     # 限制动画长度、最低 8 帧
  1492.   #  @wait_count = 8
  1493.   ##############################################################################
  1494.     # 移至步骤 5
  1495.     @phase4_step = 5
  1496.   end
  1497. ####################万兽熊最高############################
  1498.   def update_phase4_step5
  1499.     # 隐藏帮助窗口
  1500.     @help_window.visible = false
  1501.     if @active_battler.current_action.basic == 0 and
  1502.       @active_battler.current_action.kind == 0
  1503.    ####普通攻击的场合############################################################   
  1504.       #执行返回
  1505.     if not @active_battler.element_rate(UNMOVE)>100# 如果属性“不移动”不大于100
  1506.       @active_battler.startactive = "返回"
  1507.       if @active_battler.element_rate(HOMOVE)>100# 如果属性“半距离”大于100
  1508.       @_move_duration = Move_Duration/2
  1509.       else
  1510.       @_move_duration = Move_Duration   
  1511.       end
  1512.       ox,oy = @active_battler.screen_x - @active_battler.movex,\
  1513.       @active_battler.screen_y - @active_battler.movey
  1514.       while @_move_duration > 0
  1515.         Graphics.update
  1516.         Input.update
  1517.         @spriteset.update
  1518.         move(@active_battler, @oldxy, ox, oy, true)
  1519.         @_move_duration -= 1
  1520.       end
  1521.     end
  1522.    ####普通攻击的场合############################################################
  1523.     elsif @active_battler.current_action.kind == 1
  1524.       if not @skill.element_set.include?(UNMOVE)#如果技能不包含“不移动”属性
  1525.       @active_battler.startactive = "返回"
  1526.       if @skill.element_set.include?(HOMOVE)#如果技能包含“半距离”属性
  1527.       @_move_duration = Move_Duration/2
  1528.       else
  1529.       @_move_duration = Move_Duration   
  1530.       end
  1531.       ox,oy = @active_battler.screen_x - @active_battler.movex,\
  1532.       @active_battler.screen_y - @active_battler.movey
  1533.       while @_move_duration > 0
  1534.         Graphics.update
  1535.         Input.update
  1536.         @spriteset.update
  1537.         move(@active_battler, @oldxy, ox, oy, true)
  1538.         @_move_duration -= 1
  1539.       end
  1540.     end
  1541.    ####使用特技的场合############################################################
  1542. end
  1543. if @active_battler.startactive != "防御"
  1544.     @active_battler.startactive = "待机"
  1545.    end
  1546.     # 刷新状态窗口
  1547.     @status_window.refresh
  1548.     # 显示伤害
  1549.     for target in @target_battlers
  1550.       target.startactive = "待机"
  1551.       if target.damage != nil
  1552.         target.damage_pop = true
  1553.       end
  1554.     end
  1555.     # 移至步骤 6
  1556.     @phase4_step = 6
  1557.   end
  1558.   def update_phase4_step6
  1559.     # 清除强制行动对像的战斗者
  1560.     $game_temp.forcing_battler = nil
  1561.     @active_battler.movex = 0
  1562.     @active_battler.movey = 0
  1563.     @active_battler.startactive = "待机" if @active_battler.startactive != "死亡"
  1564.     # 公共事件 ID 有效的情况下
  1565.     if @common_event_id > 0
  1566.       # 设置事件
  1567.       common_event = $data_common_events[@common_event_id]
  1568.       $game_system.battle_interpreter.setup(common_event.list, 0)
  1569.     end
  1570.     # 移至步骤 1
  1571.     @phase4_step = 1
  1572.   end
  1573. end

点评

建議用 ”代碼“ 功能……  发表于 2016-11-14 23:48

Lv1.梦旅人

梦石
0
星屑
65
在线时间
141 小时
注册时间
2012-4-29
帖子
54
2
 楼主| 发表于 2016-11-15 20:22:25 | 只看该作者
什麼意思...
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33488
在线时间
5108 小时
注册时间
2012-11-19
帖子
4878

开拓者

3
发表于 2016-11-19 11:47:31 | 只看该作者
把位图加宽点吧
第12行 bitmap = Bitmap.new(350, 150)
改成:bitmap = Bitmap.new(450, 150)  试试
xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
65
在线时间
141 小时
注册时间
2012-4-29
帖子
54
4
 楼主| 发表于 2016-11-19 23:48:04 | 只看该作者
芯☆淡茹水 发表于 2016-11-19 11:47
把位图加宽点吧
第12行 bitmap = Bitmap.new(350, 150)
改成:bitmap = Bitmap.new(450, 150)  试试 ...

還是一樣耶...嗚嗚,感謝回復^^
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-27 02:37

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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