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

Project1

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

脚本修改问题,关于连续伤害。

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
60
在线时间
1 小时
注册时间
2008-10-23
帖子
28
跳转到指定楼层
1
发表于 2009-5-20 18:52:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
我在Game_Battler 3的 应用连续伤害效果里添加了一句
    if self.state?(41)
      self.damage = -self.maxhp / 10
      self.hp -= self.damage
    end
如果添加41号状态,则每回合加血 。
但是每回合加血的时候角色会播放挨打的动画(我用的是幻想三国的全动画)并弹出伤害数字
{/wx}如何才能让加血的时候不播放挨打的动画,但是要像物品加血一样弹出数字。
而当角色中毒的时候,既播放动画,又弹出伤害。{/cy}
我用的是彩虹神剑
  1. #==============================================================================
  2. # ■ 彩虹神剑
  3. #------------------------------------------------------------------------------
  4. #  支持角色斜四方向跟随(事件版)
  5. #   By 柳柳,叶子(显示总伤害),whbm(连击+其他)
  6. #==============================================================================
  7. =begin
  8. ==============================================================================

  9. 彩虹神剑(伤害分段显示)显示总伤害版 v1.0b

  10. 8-22-2006
  11. 在彩虹神剑的基础上增加了显示连机数的效果以及其他效果和本战斗系统所必要的东西。

  12. 6-20-2006 v1.0
  13. 在彩虹神剑的基础上增加了显示总伤害的功能,而且总伤害的数字是弹出伤害时逐渐增加的

  14. v1.0a
  15. 修正了显示伤害和实际伤害有差别的问题
  16. 修正了miss的情况下显示miss混乱的问题
  17. 修正了对己方技能重复显示伤害的问题
  18. 未修正播放目标动画第一帧时目标有时无端跳动的BUG

  19. v1.0b
  20. 修改了总伤害数字的位置和z坐标
  21. 未修正播放目标动画第一帧时目标有时无端跳动的BUG

  22. ==============================================================================
  23. =end
  24. # 核心的说明:
  25. # damage_pop 不再附带damage()的功能,这个放到animation里面去了

  26. module RPG
  27. #--------------------------------------------------------------------------
  28. # ● 常量设定
  29. #--------------------------------------------------------------------------
  30. # 是否显示总伤害
  31. SHOW_TOTAL_DAMAGE = true
  32. # 角色受攻击时是否跳一下
  33. BATTLER_JUMP = true

  34. class Sprite < ::Sprite
  35.    #==========================================
  36.    # 修改说明:
  37.    # @flash_shake用来制作挨打时候跳跃
  38.    # @_damage    用来记录每次打击之后弹出数字
  39.    # @_total_damage 记录总伤害
  40.    # @_total_damage_duration 总伤害持续帧
  41.    #==========================================
  42.    #alias 66RPG_rainbow_initialize : initialize
  43.    def initialize(viewport = nil)
  44.      #66RPG_rainbow_initialize(viewport)
  45.      super(viewport)
  46.      @_whiten_duration = 0
  47.      @_appear_duration = 0
  48.      @_escape_duration = 0
  49.      @_collapse_duration = 0
  50.      @_damage_duration = 0
  51.      @_animation_duration = 0
  52.      @_blink = false
  53.      # 挨打时候跳跃
  54.      @flash_shake = 0
  55.      # 伤害记录数组
  56.      @_damage = []
  57.      # 总伤害数字
  58.      @_total_damage = 0
  59.      # 总伤害持续帧
  60.      @_total_damage_duration = 0
  61.      #.........................................................................
  62.      @hits = 0
  63.      #.........................................................................
  64.    end
  65.    def damage(value, critical)
  66.      #.........................................................................
  67.      #清除hit数
  68.      dispose_hit
  69.      #.........................................................................
  70.      if value.is_a?(Numeric)
  71.        damage_string = value.abs.to_s
  72.      else
  73.        damage_string = value.to_s
  74.      end
  75.      bitmap = Bitmap.new(160, 48)
  76.      bitmap.font.name = "Arial Black"
  77.      bitmap.font.size = 32
  78.      bitmap.font.color.set(0, 0, 0)
  79.      bitmap.draw_text(-1, 12-1, 160, 36, damage_string, 1)
  80.      bitmap.draw_text(+1, 12-1, 160, 36, damage_string, 1)
  81.      bitmap.draw_text(-1, 12+1, 160, 36, damage_string, 1)
  82.      bitmap.draw_text(+1, 12+1, 160, 36, damage_string, 1)
  83.      #=======================================
  84.      # 修改:颜色
  85.      #=======================================
  86.      if value.is_a?(Numeric) and value < 0
  87.        bitmap.font.color.set(176, 255, 144)
  88.      else
  89.        bitmap.font.color.set(255, 55, 55)
  90.      end
  91.      bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
  92.      if critical
  93.        bitmap.font.size = 20
  94.        bitmap.font.color.set(0, 0, 0)
  95.        bitmap.draw_text(-1, -1, 160, 20, "CRITICAL", 1)
  96.        bitmap.draw_text(+1, -1, 160, 20, "CRITICAL", 1)
  97.        bitmap.draw_text(-1, +1, 160, 20, "CRITICAL", 1)
  98.        bitmap.draw_text(+1, +1, 160, 20, "CRITICAL", 1)
  99.        bitmap.font.color.set(255, 255, 255)
  100.        bitmap.draw_text(0, 0, 160, 20, "CRITICAL", 1)
  101.      end
  102.      @_damage_sprite = ::Sprite.new#(self.viewport)
  103.      @_damage_sprite.bitmap = bitmap
  104.      @_damage_sprite.ox = 80
  105.      @_damage_sprite.oy = 20
  106.      @_damage_sprite.x = self.x
  107.      @_damage_sprite.y = self.y - self.oy / 2
  108.      @_damage_sprite.z = 3000
  109.      @_damage_duration = 40
  110.      #=======================================
  111.      # 修改:推入新的伤害
  112.      #=======================================
  113.      @_damage.push([@_damage_sprite,@_damage_duration-10,0, rand(30) - 15, rand(3)])
  114.      # 总伤害处理
  115.      make_total_damage(value)
  116.    end
  117.    #--------------------------------------------------------------------------
  118.    # ● 返回 @hits
  119.    #--------------------------------------------------------------------------
  120.    def get_hit
  121.      return @hits
  122.    end
  123.    #--------------------------------------------------------------------------
  124.    # ● hit数的美化描绘
  125.    #--------------------------------------------------------------------------
  126.    #..........................................................................
  127.    def hit
  128.      # 如果伤害值是数值
  129.      # 转为字符串
  130.      value=@hits
  131.      hits_string = value.to_s
  132.      # 初始化位图
  133.      bitmap = Bitmap.new(320, 64)
  134.      bitmap.font.name = "Arial Black"
  135.      bitmap.font.size = 32
  136.      # 分割伤害值字符串
  137.      hits_array = hits_string.scan(/./)
  138.      hits_x = - 36.2#hits_string.size * 18.1 # 81 - hits_string.size * 18.1
  139.      rect_y = 0
  140.      # 循环伤害值字符串
  141.      for char in hits_array
  142.        # 后移一位
  143.        hits_x += 36.2
  144.        number = char.to_i
  145.        # 显示伤害数字
  146.        bitmap.blt(hits_x, 0, RPG::Cache.picture("Number"),
  147.        Rect.new(number * 36.2, rect_y, 36.2, 50))
  148.      end
  149.      hits_x += 18.1
  150.      bitmap.blt(hits_x, 0, RPG::Cache.picture("HITS"),
  151.                 Rect.new(0, -21, 90, 50))
  152.      # 伤害值定位
  153.      @_hits_sprite = ::Sprite.new(self.viewport)
  154.      @_hits_sprite.bitmap = bitmap
  155.      @_hits_sprite.x = 560 - hits_string.size * 36.2
  156.      @_hits_sprite.y = 70
  157.      @_hits_sprite.z = 3000
  158.      @_hits_duration = 40
  159.    end
  160.    #..........................................................................
  161.    #--------------------------------------------------------------------------
  162.    # ● 总伤害处理
  163.    #--------------------------------------------------------------------------
  164.    def make_total_damage(value)
  165.      if value.is_a?(Numeric) and SHOW_TOTAL_DAMAGE
  166.        @_total_damage += value
  167.      else
  168.        return
  169.      end
  170.      bitmap = Bitmap.new(300, 150)
  171.      bitmap.font.name = "Arial Black"
  172.      bitmap.font.size = 48
  173.      bitmap.font.color.set(0, 0, 0)
  174.      bitmap.draw_text(+2, 12+2, 160, 36, @_total_damage.abs.to_s, 1)
  175.      if @_total_damage < 0
  176.        bitmap.font.color.set(80, 255, 00)
  177.      else
  178.        bitmap.font.color.set(255, 140, 0)
  179.      end
  180.      bitmap.draw_text(0, 12, 160, 36, @_total_damage.abs.to_s, 1)
  181.      if @_total_damage_sprite.nil?
  182.        @_total_damage_sprite = ::Sprite.new#(self.viewport)
  183.        @_total_damage_sprite.ox = 80
  184.        @_total_damage_sprite.oy = 20
  185.        @_total_damage_sprite.z = 3000
  186.      end
  187.      @_total_damage_sprite.bitmap = bitmap
  188.      @_total_damage_sprite.zoom_x = 1.5
  189.      @_total_damage_sprite.zoom_y = 1.5
  190.      @_total_damage_sprite.x = self.x
  191.      @_total_damage_sprite.y = self.y  - self.oy / 2 - 64
  192.      @_total_damage_sprite.z = 3001
  193.      #.........................................................................
  194.      @_total_damage_duration = 40
  195.      #.........................................................................
  196.      #.........................................................................
  197.      #hit数描绘
  198.      @hits+=1
  199.      hit
  200.      #.........................................................................
  201.    end
  202.    def animation(animation, hit, battler_damage="", battler_critical=false)
  203.      dispose_animation      
  204.      #=======================================
  205.      # 修改:记录伤害和critical
  206.      #=======================================
  207.      @battler_damage = battler_damage
  208.      @battler_critical = battler_critical
  209.      @_animation = animation
  210.      return if @_animation == nil
  211.      @_animation_hit = hit
  212.      @_animation_duration = @_animation.frame_max
  213.      animation_name = @_animation.animation_name
  214.      animation_hue = @_animation.animation_hue
  215.      bitmap = RPG::Cache.animation(animation_name, animation_hue)
  216.      #=======================================
  217.      # 修改:计算总闪光权限值
  218.      #=======================================
  219.      for timing in @_animation.timings
  220.        quanzhong = animation_process_timing(timing, @_animation_hit,true)
  221.        @all_quanzhong += quanzhong
  222.        # 记录最后一次闪光
  223.        @_last_frame = timing.frame if quanzhong != 0
  224.      end
  225.      #.........................................................................
  226.      @last_frame = @_last_frame
  227.      #.........................................................................
  228.      if @@_reference_count.include?(bitmap)
  229.        @@_reference_count[bitmap] += 1
  230.      else
  231.        @@_reference_count[bitmap] = 1
  232.      end
  233.      #=======================================
  234.      # 修改:行动方动画不显示伤害
  235.      #=======================================
  236.      if $scene.is_a?(Scene_Battle)
  237.        if $scene.animation1_id == @battler.animation_id
  238.          @battler_damage = ""
  239.        end
  240.      end
  241.      @_animation_sprites = []
  242.      if @_animation.position != 3 or not @@_animations.include?(animation)
  243.        for i in 0..15
  244.          sprite = ::Sprite.new(self.viewport)
  245.          sprite.bitmap = bitmap
  246.          sprite.visible = false
  247.          @_animation_sprites.push(sprite)
  248.        end
  249.        unless @@_animations.include?(animation)
  250.          @@_animations.push(animation)
  251.        end
  252.      end
  253.      update_animation
  254.    end
  255.    #=======================================
  256.    # 修改:更换清除伤害的算法,以防万一
  257.    #       本内容在脚本中没有使用过
  258.    #=======================================
  259.    def dispose_damage
  260.      for damage in @_damage.reverse
  261.        damage[0].bitmap.dispose
  262.        damage[0].dispose
  263.        @_damage.delete(damage)
  264.      end
  265.      @_total_damage = 0
  266.      @_last_frame = -1
  267.      if @_total_damage_sprite != nil
  268.        @_total_damage_duration = 0
  269.        @_total_damage_sprite.bitmap.dispose
  270.        @_total_damage_sprite.dispose
  271.        @_total_damage_sprite = nil
  272.      end
  273.    end
  274.    #=======================================
  275.    # 清除hit数
  276.    #=======================================
  277.    #...........................................................................
  278.    def dispose_hit
  279.      if @_hits_sprite != nil
  280.        @_hits_sprite.bitmap.dispose
  281.        @_hits_sprite.dispose
  282.        @_hits_sprite = nil
  283.      end
  284.    end
  285.    #...........................................................................
  286.    def dispose_animation
  287.      #=======================================
  288.      # 修改:清除记录的伤害,清除权重记录
  289.      #=======================================
  290.      @battler_damage = nil
  291.      @battler_critical = nil
  292.      @all_quanzhong = 1
  293.      @_total_damage = 0
  294.      @_last_frame = -1
  295.      #.........................................................................
  296.      @hits = 0
  297.      #.........................................................................
  298.      if @_animation_sprites != nil
  299.        sprite = @_animation_sprites[0]
  300.        if sprite != nil
  301.          @@_reference_count[sprite.bitmap] -= 1
  302.          if @@_reference_count[sprite.bitmap] == 0
  303.            sprite.bitmap.dispose
  304.          end
  305.        end
  306.        for sprite in @_animation_sprites
  307.          sprite.dispose
  308.        end
  309.        @_animation_sprites = nil
  310.        @_animation = nil
  311.      end
  312.    end
  313.    def update
  314.      super
  315.      if @_whiten_duration > 0
  316.        @_whiten_duration -= 1
  317.        self.color.alpha = 128 - (16 - @_whiten_duration) * 10
  318.      end
  319.      if @_appear_duration > 0
  320.        @_appear_duration -= 1
  321.        self.opacity = (16 - @_appear_duration) * 16
  322.      end
  323.      if @_escape_duration > 0
  324.        @_escape_duration -= 1
  325.        self.opacity = 256 - (32 - @_escape_duration) * 10
  326.      end
  327.      if @_collapse_duration > 0
  328.        @_collapse_duration -= 1
  329.        self.opacity = 256 - (48 - @_collapse_duration) * 6
  330.      end
  331.      #=======================================
  332.      # 修改:更新算法,更新弹出
  333.      #=======================================
  334.      if @_damage_duration > 0
  335.        @_damage_duration -= 1
  336.        for damage in @_damage
  337.          damage[0].x = self.x + self.viewport.rect.x -
  338.                        self.ox + self.src_rect.width / 2 +
  339.                        (40 - damage[1]) * damage[3] / 10
  340.          damage[0].y -= damage[4]+damage[1]/10
  341.          damage[0].opacity = damage[1]*20
  342.          damage[1] -= 1
  343.          if damage[1]==0
  344.            damage[0].bitmap.dispose
  345.            damage[0].dispose
  346.            @_damage.delete(damage)
  347.            next
  348.          end
  349.        end
  350.      end
  351.      #=======================================
  352.      # 添加:弹出总伤害
  353.      #=======================================
  354.      if @_total_damage_duration > 0
  355.        @_total_damage_duration -= 1
  356.        @_total_damage_sprite.y -= 1 if @_total_damage_duration % 2 == 0
  357.        if @_total_damage_sprite.zoom_x > 1.0
  358.          @_total_damage_sprite.zoom_x -= 0.05
  359.        end
  360.        if @_total_damage_sprite.zoom_y > 1.0
  361.          @_total_damage_sprite.zoom_y -= 0.05
  362.        end
  363.        @_total_damage_sprite.opacity = 256 - (24 - @_total_damage_duration) * 16
  364.        #......................................................................
  365.        if @_total_damage_duration <= 7 and @_total_damage_duration > 0
  366.          @_hits_sprite.opacity -= 32
  367.          @_hits_sprite.x += 1
  368.        end
  369.        #......................................................................
  370.        if @_total_damage_duration <= 0
  371.          #.....................................................................
  372.          dispose_hit
  373.          #.....................................................................
  374.          @_total_damage = 0
  375.          @_total_damage_duration = 0
  376.          @_total_damage_sprite.bitmap.dispose
  377.          @_total_damage_sprite.dispose
  378.          @_total_damage_sprite = nil
  379.        end
  380.      end
  381.      #=======================================
  382.      if @_animation != nil and (Graphics.frame_count % 2 == 0)
  383.        @_animation_duration -= 1
  384.        update_animation
  385.      end
  386.      if @_loop_animation != nil and (Graphics.frame_count % 2 == 0)
  387.        update_loop_animation
  388.        @_loop_animation_index += 1
  389.        #......................................................................
  390.        @loop_animation_once = 0
  391.        @loop_animation_once = 1 if @once == 1 and @_loop_animation_index == @_loop_animation.frame_max
  392.        #......................................................................
  393.        @_loop_animation_index %= @_loop_animation.frame_max
  394.      end
  395.      if @_blink
  396.        @_blink_count = (@_blink_count + 1) % 32
  397.        if @_blink_count < 16
  398.          alpha = (16 - @_blink_count) * 6
  399.        else
  400.          alpha = (@_blink_count - 16) * 6
  401.        end
  402.        self.color.set(255, 255, 255, alpha)
  403.      end
  404.      @@_animations.clear
  405.    end
  406.    #..........................................................................
  407.    def loop_animation_once
  408.      return @_loop_animation_once
  409.    end
  410.    #..........................................................................
  411.    def update_animation
  412.      if @_animation_duration > 0
  413.        frame_index = @_animation.frame_max - @_animation_duration
  414.        @frame_index = frame_index
  415.        cell_data = @_animation.frames[frame_index].cell_data
  416.        position = @_animation.position
  417.        animation_set_sprites(@_animation_sprites, cell_data, position)
  418.        #=======================================
  419.        # 修改:弹出伤害,权重计算
  420.        #=======================================
  421.        for timing in @_animation.timings
  422.          if timing.frame == frame_index
  423.            t = 1.0 * animation_process_timing(timing, @_animation_hit)            
  424.            #p t,"当前权重", @all_quanzhong,"总权重"
  425.            if @battler_damage.is_a?(Numeric) and t != 0
  426.              t *= @battler_damage
  427.              t /= @all_quanzhong
  428.              #p t,"当前伤害",@battler_damage,"总伤害"
  429.              t = t.to_i
  430.              # 最后一次闪光的话,伤害修正
  431.              if frame_index == @_last_frame
  432.                @_total_damage = @battler_damage - t
  433.              end
  434.              #p t,@battler_damage,@all_quanzhong
  435.              damage(t,@battler_critical)
  436.            # 防止重复播放miss
  437.            elsif !@battler_damage.is_a?(Numeric) and timing.flash_scope != 0
  438.              damage(@battler_damage,@battler_critical)
  439.            end
  440.          end
  441.        end
  442.      else
  443.        dispose_animation
  444.      end
  445.    end
  446.    #=======================================
  447.    # 修改:敌人跳跃的功能 + 添加返回数值
  448.    #=======================================
  449.    def update_loop_animation
  450.      frame_index = @_loop_animation_index
  451.      cell_data = @_loop_animation.frames[frame_index].cell_data
  452.      position = @_loop_animation.position
  453.      #·改·
  454.      if @wait_count.to_i <= 0
  455.        @wait_count = 0
  456.        animation_set_sprites(@_loop_animation_sprites, cell_data, position)
  457.      else
  458.        @wait_count -= 1
  459.        for sprite in @_loop_animation_sprites
  460.          sprite.visible = false
  461.        end
  462.      end
  463.      if @wait_flash.to_i <= 0
  464.        @wait_flash = 0
  465.      else
  466.        @wait_flash -= 1
  467.        for sprite in @_loop_animation_sprites
  468.          sprite.blend_type = 1
  469.        end
  470.      end
  471.      #·改·
  472.      for timing in @_loop_animation.timings
  473.        if timing.frame == frame_index
  474.          animation_process_timing(timing, true)
  475.        end
  476.      end
  477.    end
  478.    #=======================================
  479.    # 修改:敌人跳跃的功能 + 添加返回数值
  480.    #=======================================
  481.    def loop_animation(animation)
  482.      return if animation == @_loop_animation
  483.      dispose_loop_animation
  484.      @_loop_animation = animation
  485.      return if @_loop_animation == nil
  486.      @_loop_animation_index = 0
  487.      animation_name = @_loop_animation.animation_name
  488.      animation_hue = @_loop_animation.animation_hue
  489.      bitmap = RPG::Cache.animation(animation_name, animation_hue)
  490.      if @@_reference_count.include?(bitmap)
  491.        @@_reference_count[bitmap] += 1
  492.      else
  493.        @@_reference_count[bitmap] = 1
  494.      end
  495.      @_loop_animation_sprites = []
  496.      for i in 0..15
  497.        sprite = ::Sprite.new
  498.        sprite.bitmap = bitmap
  499.        sprite.visible = false
  500.        @_loop_animation_sprites.push(sprite)
  501.      end
  502.      update_loop_animation
  503.    end
  504.    #=======================================
  505.    # 修改:敌人跳跃的功能 + 添加返回数值
  506.    #=======================================
  507.     def animation_process_timing(timing, hit,dontflash=false)
  508.       if (timing.condition == 0) or
  509.          (timing.condition == 1 and hit == true) or
  510.          (timing.condition == 2 and hit == false)
  511.         unless dontflash
  512.           if timing.se.name != ""
  513.             se = timing.se
  514.             Audio.se_play("Audio/SE/" + se.name, se.volume, se.pitch)
  515.           end
  516.         end
  517.         case timing.flash_scope
  518.         when 1
  519.           unless dontflash
  520.             self.flash(timing.flash_color, timing.flash_duration * 2)
  521.             #....................................................................
  522.             @wait_flash = timing.flash_duration
  523.             #....................................................................
  524.             if @_total_damage >0
  525.               @flash_shake_switch = true
  526.               @flash_shake = 10
  527.             end
  528.           end
  529.           return timing.flash_color.alpha * timing.flash_duration
  530.         when 2
  531.           unless dontflash
  532.             if self.viewport != nil
  533.               self.viewport.flash(timing.flash_color, timing.flash_duration * 2)
  534.               return timing.flash_color.alpha * timing.flash_duration
  535.             end
  536.           end
  537.         when 3
  538.           unless dontflash
  539.             self.flash(nil, timing.flash_duration * 2)
  540.             #@_loop_animation_count = 1
  541.             #·改·
  542.             @wait_count = timing.flash_duration
  543.             #·改·
  544.           end
  545.           return timing.flash_color.alpha * timing.flash_duration
  546.         end
  547.       end      
  548.       return 0
  549.     end   
  550. end
  551. end
  552. #==============================================================================
  553. # ■ Sprite_Battler
  554. #==============================================================================
  555. class Sprite_Battler < RPG::Sprite
  556. #--------------------------------------------------------------------------
  557. # ● 初始化对像
  558. #    添加跳跃记录
  559. #--------------------------------------------------------------------------
  560. def initialize(viewport, battler = nil)
  561.   super(viewport)
  562.   @battler = battler
  563.   @battler_visible = false
  564.   @flash_shake_switch = true
  565.   #........................................................................
  566.   @once = 0
  567.   @frame_index = -1
  568.   @last_frame = 0
  569.   #........................................................................
  570. end
  571. #--------------------------------------------------------------------------
  572. # ● 刷新画面
  573. #    增添跳跃功能
  574. #--------------------------------------------------------------------------
  575. def update
  576.   super
  577.   # 战斗者为 nil 的情况下
  578.   if @battler == nil
  579.     self.bitmap = nil
  580.     loop_animation(nil)
  581.     return
  582.   end
  583.   # 文件名和色相与当前情况有差异的情况下
  584.   if @battler.battler_name != @battler_name or
  585.      @battler.battler_hue != @battler_hue
  586.     # 获取、设置位图
  587.     @battler_name = @battler.battler_name
  588.     @battler_hue = @battler.battler_hue
  589.     self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
  590.     #.......................................................................
  591.     if not @battler.hidden and not @battler.dead?
  592.       @battler.setup_battler_ani(@battler.battler_name.split(/★/)[1])
  593.     end
  594.     #.......................................................................
  595.     @width = bitmap.width
  596.     @height = bitmap.height
  597.     self.ox = @width / 2
  598.     self.oy = @height
  599.   end
  600.   #.......................................................................
  601.   update_actor_animation
  602.   update_enemy_animation
  603.   #.......................................................................
  604.   # 动画 ID 与当前的情况有差异的情况下
  605.   #.........................................................................
  606.   if @battler.is_a?(Game_Enemy)
  607.     if @once == 1 and @loop_animation_once == 1 and
  608.        @battler.battler_dead_ani == 1
  609.       @battler.setup_battler_ani(@battler.battler_name.split(/★/)[5])
  610.     elsif @once == 1 and @loop_animation_once == 1 and $scene.phase != 5
  611.       @battler.setup_battler_ani(@battler.battler_name.split(/★/)[1])
  612.     end
  613.   end
  614.   if @battler.is_a?(Game_Actor)
  615.     if @once == 1 and @loop_animation_once == 1 and $scene.phase != 5 and
  616.        @battler.battler_dead_ani == 1
  617.       @battler.setup_battler_ani(@battler.battler_name.split(/★/)[5])
  618.     elsif @once == 1 and @loop_animation_once == 1 and $scene.phase != 5
  619.       @battler.setup_battler_ani(@battler.battler_name.split(/★/)[1])
  620.     elsif @once == 1 and @loop_animation_once == 1 and $scene.phase == 5 and
  621.           not @battler.dead?
  622.       @battler.setup_battler_ani(@battler.battler_name.split(/★/)[7])
  623.     end
  624.   end
  625.   if @battler.battler_ani != @battler_ani
  626.     @battler_ani = @battler.battler_ani
  627.     @once = @battler.battler_ani_once
  628.     loop_animation($data_animations[@battler_ani.to_i])
  629.   end
  630.   #.........................................................................
  631.   # 应该被显示的角色的情况下
  632.   if @battler.is_a?(Game_Actor) and @battler_visible
  633.     # 不是主状态的时候稍稍降低点透明度
  634.     if $game_temp.battle_main_phase
  635.       self.opacity += 3 if self.opacity < 255
  636.     else
  637.       self.opacity -= 3 if self.opacity > 207
  638.     end
  639.   end
  640.   # 明灭
  641.   if @battler.blink
  642.     blink_on
  643.   else
  644.     blink_off
  645.   end
  646.   # 不可见的情况下
  647.   unless @battler_visible
  648.     # 出现
  649.     if not @battler.hidden and not @battler.dead? and
  650.        (@battler.damage == nil or @battler.damage_pop)
  651.       #.......................................................................
  652.       if @battler.is_a?(Game_Enemy)
  653.         @battler.setup_battler_ani(@battler.battler_name.split(/★/)[1])
  654.         #appear
  655.       else
  656.         @battler.setup_battler_ani(@battler.battler_name.split(/★/)[1])
  657.       end
  658.       #.......................................................................
  659.       @battler_visible = true
  660.     end
  661.   end
  662.   # 可见的情况下
  663.   if @battler_visible
  664.     # 逃跑
  665.     if @battler.hidden
  666.       $game_system.se_play($data_system.escape_se)
  667.       escape
  668.       @battler_visible = false
  669.     end
  670.     # 白色闪烁
  671.     if @battler.white_flash
  672.       whiten
  673.       @battler.white_flash = false
  674.     end
  675.     # 动画
  676.     if @battler.animation_id != 0
  677.       animation = $data_animations[@battler.animation_id]
  678.       animation(animation, @battler.animation_hit,@battler.damage, @battler.critical)
  679.       @battler.animation_id = 0
  680.     end
  681.     # 伤害
  682.     if @battler.damage_pop
  683.       @battler.damage = nil
  684.       @battler.critical = false
  685.       @battler.damage_pop = false
  686.     end
  687.     # korapusu
  688.     if @battler.damage == nil and @battler.dead?
  689.       if @battler.is_a?(Game_Enemy)
  690.         if @battler.battler_dead_ani != 1
  691.           #p "Battler Death Error"
  692.           $game_system.se_play($data_system.enemy_collapse_se)
  693.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[4], 1)
  694.           @battler.setup_battler_dead_ani(1)
  695.         end
  696.         #.....................................................................
  697.         collapse
  698.         #.....................................................................
  699.       else
  700.         #.....................................................................
  701.         if @battler.battler_dead_ani != 1
  702.           #p "Battler Death Error"
  703.           $game_system.se_play($data_system.enemy_collapse_se)
  704.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[4], 1)
  705.           @battler.setup_battler_dead_ani(1)
  706.         end
  707.         #.....................................................................
  708.       end
  709.       @battler_visible = false
  710.     end
  711.   end
  712.   # 设置活动块的坐标
  713.   if @flash_shake_switch == true
  714.     self.x = @battler.screen_x
  715.     self.y = @battler.screen_y
  716.     self.z = @battler.screen_z
  717.     @flash_shake_switch = false
  718.   end
  719.   if @flash_shake != 0 and @battler.damage != nil and RPG::BATTLER_JUMP
  720.     if @battler.is_a?(Game_Enemy)
  721.       case @flash_shake
  722.       when 9..10
  723.         self.x -=4
  724.         self.y -=4
  725.         self.z = @battler.screen_z
  726.       when 6..8
  727.         self.x -=2
  728.         self.y -=2
  729.         self.z = @battler.screen_z
  730.       when 3..5
  731.         self.x +=2
  732.         self.y +=2
  733.         self.z = @battler.screen_z
  734.       when 1..2
  735.         self.x +=4
  736.         self.y +=4
  737.         self.z = @battler.screen_z
  738.       end
  739.     end
  740.     if @battler.is_a?(Game_Actor)
  741.       case @flash_shake
  742.       when 9..10
  743.         self.x +=4
  744.         self.y +=4
  745.         self.z = @battler.screen_z
  746.       when 6..8
  747.         self.x +=2
  748.         self.y +=2
  749.         self.z = @battler.screen_z
  750.       when 3..5
  751.         self.x -=2
  752.         self.y -=2
  753.         self.z = @battler.screen_z
  754.       when 1..2
  755.         self.x -=4
  756.         self.y -=4
  757.         self.z = @battler.screen_z
  758.       end
  759.     end
  760.     @flash_shake -= 1
  761.   end
  762. end
  763. end

  764. #==============================================================================
  765. # ■ Scene_Battle
  766. #------------------------------------------------------------------------------
  767. #  处理战斗画面的类。
  768. #==============================================================================

  769. class Scene_Battle
  770. #--------------------------------------------------------------------------
  771. # ● 定义实例变量
  772. #--------------------------------------------------------------------------
  773. attr_reader   :animation1_id                    # 行动方动画ID
  774. end

复制代码
  1. #==============================================================================
  2. # ■ 默认damage的修改
  3. #------------------------------------------------------------------------------
  4. #  主要是为了修正
  5. #   By whbm
  6. #==============================================================================
  7. module RPG
  8.   class Sprite < ::Sprite
  9.     def damage(value, critical)
  10.       dispose_damage
  11.       if value.is_a?(Numeric)
  12.         damage_string = value.abs.to_s
  13.       else
  14.         damage_string = value.to_s
  15.       end
  16.       bitmap = Bitmap.new(160, 48)
  17.       bitmap.font.name = "Arial Black"
  18.       bitmap.font.size = 32
  19.       bitmap.font.color.set(0, 0, 0)
  20.       bitmap.draw_text(-1, 12-1, 160, 36, damage_string, 1)
  21.       bitmap.draw_text(+1, 12-1, 160, 36, damage_string, 1)
  22.       bitmap.draw_text(-1, 12+1, 160, 36, damage_string, 1)
  23.       bitmap.draw_text(+1, 12+1, 160, 36, damage_string, 1)
  24.       if value.is_a?(Numeric) and value < 0
  25.         bitmap.font.color.set(176, 255, 144)
  26.       else
  27.         bitmap.font.color.set(255, 255, 255)
  28.       end
  29.       bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
  30.       if critical
  31.         bitmap.font.size = 20
  32.         bitmap.font.color.set(0, 0, 0)
  33.         bitmap.draw_text(-1, -1, 160, 20, "CRITICAL", 1)
  34.         bitmap.draw_text(+1, -1, 160, 20, "CRITICAL", 1)
  35.         bitmap.draw_text(-1, +1, 160, 20, "CRITICAL", 1)
  36.         bitmap.draw_text(+1, +1, 160, 20, "CRITICAL", 1)
  37.         bitmap.font.color.set(255, 255, 255)
  38.         bitmap.draw_text(0, 0, 160, 20, "CRITICAL", 1)
  39.       end
  40.       @_damage_sprite = ::Sprite.new(self.viewport)
  41.       @_damage_sprite.bitmap = bitmap
  42.       @_damage_sprite.ox = 80
  43.       @_damage_sprite.oy = 20
  44.       @_damage_sprite.x = self.x
  45.       @_damage_sprite.x -= self.bitmap.width/2 if @battler.is_a?(Game_Actor)
  46.       @_damage_sprite.y = self.y - self.oy / 2
  47.       @_damage_sprite.z = 3000
  48.       @_damage_duration = 40
  49.     end
  50.   end
  51. end
复制代码

Lv3.寻梦者 (版主)

  /) /)<

梦石
0
星屑
4212
在线时间
4890 小时
注册时间
2009-2-16
帖子
8434

开拓者短篇七成年组季军

2
发表于 2009-5-20 19:58:26 | 只看该作者
http://rpg.blue/web/htm/news1052.htm

直接用这个吧
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6875
在线时间
1666 小时
注册时间
2008-10-29
帖子
6710

贵宾

3
发表于 2009-5-20 20:40:47 | 只看该作者
把那一段写到Scene_Battle 4 去
把self换成@active_battler











你知道得太多了

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-15 06:29

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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