查看: 2585|回复: 8

[已经解决] 多动画Z坐标

[复制链接]
梦石
0
星屑
3850
在线时间
1899 小时
注册时间
2010-6-19
回帖
917
发表于 2022-9-2 21:08:47 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 黑米馒头 于 2022-9-3 15:51 编辑

这是已经设置好的动画效果,

前缀SM的状态动画在 战斗图上方显示,XM的为战斗图下方显示
1.png

然后现在问题是,用法术动画的时候,刚好被前缀SM的状态动画给挡住了,
2.png

所以想在加1种坐标,法术动画可以显示到状态动画上面

3.png




用了多动画状态脚本,在里面设置了3种类型的动画坐标,如何再添加1种

已经设置好坐标,
优先级  SM动画(self.z + 6) > 普通动画(self.z) > XM动画(self.z - 200)

如何再添加1个类型的动画Z坐标,前缀加FS的Z坐标在其他3种坐标之上


一开始自己这么添加的

        # > 粗暴式修正,有调试需求改下方增加的数值 <
        if position == 1 and not hzhj.nil? and hzhj[0, 2] == "FS"
        # 调整动画名字前面带 "FS" 的动画的 Z坐标 显示在战斗图上方  
          z_plus = 100 # 最佳值
          sprite.z = self.z + z_plus
        end
但是显示的效果还是一样,法术动画被状态动画给挡住了



[pre lang="ruby"]
#======================================================================
# 脚本来自www.66rpg.com,使用或转载请保留此信息
# 功能:多状态动画同时显示
# 版本:2.01
# 作者:后知后觉 2011-3-2
# 使用方法:插入Main前即可
# 冲突可能:只要在你的脚本编辑器内没有对 RPG::Sprite 或 Sprite_Battler 类
#           以下三个方法做出过别的定义 则就有较大的兼容性
#           loop_animation
#           dispose_loop_animation
#           update_loop_animation
#----------------------------------------------------------------
# 使用方法:

# 在状态库和动画库的名称开头,加上XM,便使该ID动画Z坐标下降

# 普通动画z坐标为self.z

# 状态动画z坐标为self.z + 6,  动画名字中包含"SM"二字为人物动画

# 状态动画z坐标为self.z - 200,动画名字中包含"XM"二字为状态动画

# 优先级为 SM动画(self.z + 6) > 普通动画(self.z) > XM动画(self.z - 200)
#----------------------------------------------------------------

module RPG
  class Sprite < ::Sprite
    if @hzhj_alias_method_for_state_animation.nil?
      alias hzhj_old_ini_for_state_animation initialize
      alias hzhj_old_update_for_state_animation update
      alias hzhj_old_x_for_state_animation x=
      alias hzhj_old_y_for_state_animation y=
      @hzhj_alias_method_for_state_animation = true
    end
    def initialize(*args)
      @hzhj_loop_animations = []
      @hzhj_loop_sprites = {}
      @hzhj_loop_index = {}
      hzhj_old_ini_for_state_animation(*args)
    end
    def animation(animation, hit, user=nil)
      dispose_animation
      @_animation = animation
      return if @_animation == nil
      @_animation_hit = hit
      @_animation_duration = @_animation.frame_max
      animation_name = @_animation.animation_name
      animation_hue = @_animation.animation_hue
      
      #----------------------------------------------------------------
      # #【战斗图色相关联动画色相】
      unless user.nil?
        if user.is_a?(Game_Actor)
          if ANIMATION_ACTOR.keys.include?(user.id)
            animation_hue = user.battler_hue if ANIMATION_ACTOR[user.id].include?(animation.id)
          end
        else
          if ANIMATION_ENEMY.keys.include?(user.id)
            animation_hue = user.battler_hue if ANIMATION_ENEMY[user.id].include?(animation.id)
          end
        end
      end      
      #----------------------------------------------------------------
      
      bitmap = RPG::Cache.animation(animation_name, animation_hue)
      if @@_reference_count.include?(bitmap)
        @@_reference_count[bitmap] += 1
      else
        @@_reference_count[bitmap] = 1
      end
      @_animation_sprites = []
      if @_animation.position != 3 or not @@_animations.include?(animation)
        for i in 0..15
          sprite = ::Sprite.new(self.viewport)
          sprite.bitmap = bitmap
          sprite.visible = false
         
          # 当战斗者为角色的情况
          if @battler.is_a?(Game_Actor)
             self.z = @battler.s_y + 100
          # 当战斗者为敌人的情况
          elsif @battler.is_a?(Game_Enemy)
             self.z = @battler.screen_y + 100
          else
             self.z = 10+1000 # 平时【非战斗】
          end         
          # 默认动画 Z坐标★★★★★★★★★★★★★★★★★
          sprite.z = self.z
         
          @_animation_sprites.push(sprite)
        end
        unless @@_animations.include?(animation)
          @@_animations.push(animation)
        end
      end
      update_animation
    end

    def loop_animation(animation)
      return if @hzhj_loop_animations.include?(animation)
      if animation.nil?
        dispose_loop_animation
        return
      end
      @hzhj_loop_animations.push(animation)
      @hzhj_loop_index[animation] = 0
      animation_name = animation.animation_name
      animation_hue = animation.animation_hue
      bitmap = RPG::Cache.animation(animation_name, animation_hue)
      if @@_reference_count.include?(bitmap)
        @@_reference_count[bitmap] += 1
      else
        @@_reference_count[bitmap] = 1
      end
      loop_animation_sprites = []
      for i in 0..15
        sprite = ::Sprite.new(self.viewport)
        sprite.bitmap = bitmap
        
        # 当战斗者为角色的情况
        if @battler.is_a?(Game_Actor)
           self.z = @battler.s_y + 100
        # 当战斗者为敌人的情况
        elsif @battler.is_a?(Game_Enemy)
           self.z = @battler.screen_y + 100
        else
           self.z = 10
        end
        # 默认动画 Z坐标★★★★★★★★★★★★★★★★★
        sprite.z = self.z
        # 调整动画名字前面带 "SM" 的动画的 Z坐标★★★★★★★★★★★★★★★★★
        sprite.z = self.z + 1 if animation.name.include?("SM")
        
        sprite.visible = false
        loop_animation_sprites.push(sprite)
      end
      @hzhj_loop_sprites[animation] = loop_animation_sprites
      update_loop_animation
    end
    def dispose_loop_animation
      if not @hzhj_loop_animations.empty?
        for sprites in @hzhj_loop_sprites.values
          next if sprites.nil?
          sprite = sprites[0]
          if sprite != nil
            @@_reference_count[sprite.bitmap] -= 1
            if @@_reference_count[sprite.bitmap] == 0
              sprite.bitmap.dispose
            end
          end
          for sprite in sprites
            sprite.dispose
          end
        end
        @hzhj_loop_index.clear
        @hzhj_loop_sprites.clear
        @hzhj_loop_animations.clear
      end
    end
    def update
      hzhj_old_update_for_state_animation
      # 调整状态动画的刷新速度,修改 Graphics.frame_count % 2 == 0
      if not @hzhj_loop_animations.empty? and (Graphics.frame_count % 2 == 0)
        update_loop_animation
        for animation in @hzhj_loop_animations
          @hzhj_loop_index[animation] += 1
          @hzhj_loop_index[animation] %= animation.frame_max
        end
      end
    end
    def update_loop_animation
      # 死亡时状态动画的可见度
      if @xiaoshi2 != nil and @xiaoshi2 > 255
        @xiaoshi2 = 1
        for animation in @hzhj_loop_animations
          frame_index = @hzhj_loop_index[animation]
          cell_data = animation.frames[frame_index].cell_data
          position = animation.position
          sprites = @hzhj_loop_sprites[animation]
          animation_set_sprites(sprites, cell_data, position, true)
        end
      else
        for animation in @hzhj_loop_animations
          frame_index = @hzhj_loop_index[animation]
          cell_data = animation.frames[frame_index].cell_data
          position = animation.position
          sprites = @hzhj_loop_sprites[animation]
          hzhj = animation.name.clone
          animation_set_sprites(sprites, cell_data, position, false, hzhj)
          for timing in animation.timings
            if timing.frame == frame_index
              animation_process_timing(timing, true)
            end
          end
        end
      end
    end
    def x=(new_x)
      sx = new_x - self.x
      if sx != 0
        if not @hzhj_loop_animations.empty?
          for animation in @hzhj_loop_animations
            for i in 0..15
              @hzhj_loop_sprites[animation].x += sx
            end
          end
        end
      end
      hzhj_old_x_for_state_animation(new_x)
    end
    def y=(new_y)
      sy = new_y - self.y
      if sy != 0
        if not @hzhj_loop_animations.empty?
          for animation in @hzhj_loop_animations
            for i in 0..15
              @hzhj_loop_sprites[animation].y += sy
            end
          end
        end
      end
      hzhj_old_y_for_state_animation(new_y)
    end
    def stop_loop_animation(animation)
      return if not @hzhj_loop_animations.include?(animation)
      if not @battler.nil?
        for i in @battler.states
          next if $data_states.nil?
          if $data_states.animation_id == animation.id
            return
          end
        end
      end
      sprites = @hzhj_loop_sprites[animation]
      sprite = sprites[0]
      if sprite != nil
        @@_reference_count[sprite.bitmap] -= 1
        if @@_reference_count[sprite.bitmap] == 0
          sprite.bitmap.dispose
        end
      end
      for sprite in sprites
        sprite.dispose
      end
      @hzhj_loop_index[animation] = 0
      @hzhj_loop_sprites[animation] = nil
      @hzhj_loop_animations.delete(animation)
    end
    def animation_set_sprites(sprites, cell_data, position,kds = false, hzhj = nil)
      if kds
        for i in 0..15
          sprites.visible = false
        end
        return
      end
      for i in 0..15
        sprite = sprites
        pattern = cell_data[i, 0]
        if sprite == nil or pattern == nil or pattern == -1
          sprite.visible = false if sprite != nil
          next
        end
        sprite.visible = true
        sprite.src_rect.set(pattern % 5 * 192, pattern / 5 * 192, 192, 192)
        if position == 3
          if self.viewport != nil
            sprite.x = self.viewport.rect.width / 2
            sprite.y = self.viewport.rect.height - 160
          else
            sprite.x = 320
            sprite.y = 240
          end
        else
          sprite.x = self.x - self.ox + self.src_rect.width / 2
          sprite.y = self.y - self.oy + self.src_rect.height / 2
          sprite.y -= self.src_rect.height / 4 if position == 0
          sprite.y += self.src_rect.height / 4 if position == 2
        end
        sprite.x += cell_data[i, 1]
        sprite.y += cell_data[i, 2]
        
        # 当战斗者为角色的情况
        if @battler.is_a?(Game_Actor)
           self.z = @battler.s_y + 100
        # 当战斗者为敌人的情况   
        elsif @battler.is_a?(Game_Enemy)
           self.z = @battler.screen_y + 100
        else
           self.z = 10
        end

        if position == 1 and not hzhj.nil? and hzhj[0, 2] == "XM"
        # 调整动画名字前面带 "XM" 的动画的 Z坐标 显示在战斗图下方  
          sprite.z = self.z - 200
        end

        # > 粗暴式修正,有调试需求改下方增加的数值 <
        if position == 1 and not hzhj.nil? and hzhj[0, 2] == "SM"
        # 调整动画名字前面带 "SM" 的动画的 Z坐标 显示在战斗图上方  
          z_plus = 6 # 最佳值
          sprite.z = self.z + z_plus
        end

        sprite.ox = 96
        sprite.oy = 96
        sprite.zoom_x = cell_data[i, 3] / 100.0
        sprite.zoom_y = cell_data[i, 3] / 100.0
        sprite.angle = cell_data[i, 4]
        sprite.mirror = (cell_data[i, 5] == 1)
        sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
        sprite.blend_type = cell_data[i, 7]
      end
    end
  end
end
#==============================================================================
# ■ Game_Battler
#==============================================================================

class Game_Battler
  if @hzhj_alias_method_for_state_animation.nil?
    alias hzhj_old_ini_gb_state_animation initialize
    alias hzhj_old_add_state add_state
    alias hzhj_old_remove_state remove_state
    @hzhj_alias_method_for_state_animation = true
  end
  #--------------------------------------------------------------------------
  # ● 定义实例变量
  #--------------------------------------------------------------------------
  attr_reader   :hzhj_add_state_id
  attr_reader   :hzhj_remove_state_id
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
  def initialize
    @hzhj_add_state_id = []
    @hzhj_remove_state_id = []
    hzhj_old_ini_gb_state_animation
  end
  #--------------------------------------------------------------------------
  # ● 附加状态
  #--------------------------------------------------------------------------
  def add_state(state_id, force = false)
    old_states = @states.clone
    hzhj_old_add_state(state_id, force)
    return if old_states == @states
    zjdzt = (@states | old_states) & @states
    jsdzt = (@states | old_states) & old_states
    for i in zjdzt
      if $data_states.animation_id > 0
        if not @hzhj_add_state_id.include?(i)
          @hzhj_add_state_id.push(i)
        end
      end
    end
    for i in jsdzt
      if $data_states.animation_id > 0
        if not @hzhj_remove_state_id.include?(i)
          @hzhj_remove_state_id.push(i)
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 解除状态
  #--------------------------------------------------------------------------
  def remove_state(state_id, force = false)
    old_states = @states.clone
    hzhj_old_remove_state(state_id, force)
    return if old_states == @states
    zjdzt = (@states | old_states) & @states
    jsdzt = (@states | old_states) & old_states
    for i in zjdzt
      if $data_states.animation_id > 0
        if not @hzhj_add_state_id.include?(i)
          @hzhj_add_state_id.push(i)
        end
      end
    end
    for i in jsdzt
      if $data_states.animation_id > 0
        if not @hzhj_remove_state_id.include?(i)
          @hzhj_remove_state_id.push(i)
        end
      end
    end
  end
end
#==============================================================================
# ■ Sprite_Battler
#==============================================================================

class Sprite_Battler < RPG::Sprite
  if @hzhj_alias_sb_for_state_animation.nil?
    alias hzhj_old_init_sb_for_state_animation initialize
    alias hzhj_old_update_sb_for_state_animation update
    @hzhj_alias_sb_for_state_animation = true
  end
  #--------------------------------------------------------------------------
  # ● 初始化
  #--------------------------------------------------------------------------
  def initialize(*args)
    hzhj_old_init_sb_for_state_animation(*args)
    if not @battler.nil?
      @battler.hzhj_add_state_id.clear
      @battler.hzhj_remove_state_id.clear
      for i in @battler.states
        next if $data_states.nil?
        next if $data_states.animation_id == 0
        next if $data_animations[$data_states.animation_id].nil?
        @battler.hzhj_add_state_id.push(i)
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def update
    hzhj_old_update_sb_for_state_animation
    if not @battler.nil?
      if @battler.damage.nil?
        if not @battler.hzhj_add_state_id.empty?
          for i in @battler.hzhj_add_state_id
            if @battler.state?(i)
              animation_id = $data_states.animation_id
              animation = $data_animations[animation_id]
              loop_animation(animation) if not animation.nil?
            end
          end
          @battler.hzhj_add_state_id.clear
        end
        if not @battler.hzhj_remove_state_id.empty?
          for i in @battler.hzhj_remove_state_id
            if not @battler.state?(i)
              animation_id = $data_states.animation_id
              animation = $data_animations[animation_id]
              stop_loop_animation(animation) if not animation.nil?
            end
          end
          @battler.hzhj_remove_state_id.clear
        end
      end
    end
  end
end
[/pre]
梦石
0
星屑
2876
在线时间
172 小时
注册时间
2020-8-9
回帖
100
发表于 2022-9-3 12:50:18 | 显示全部楼层
303行到310行是修改内容,如果有问题就删掉好了
  1. #======================================================================
  2. # 脚本来自[url]www.66rpg.com[/url],使用或转载请保留此信息
  3. # 功能:多状态动画同时显示
  4. # 版本:2.01
  5. # 作者:后知后觉 2011-3-2
  6. # 使用方法:插入Main前即可
  7. # 冲突可能:只要在你的脚本编辑器内没有对 RPG::Sprite 或 Sprite_Battler 类
  8. #           以下三个方法做出过别的定义 则就有较大的兼容性
  9. #           loop_animation
  10. #           dispose_loop_animation
  11. #           update_loop_animation
  12. #----------------------------------------------------------------
  13. # 使用方法:

  14. # 在状态库和动画库的名称开头,加上XM,便使该ID动画Z坐标下降

  15. # 普通动画z坐标为self.z

  16. # 状态动画z坐标为self.z + 6,  动画名字中包含"SM"二字为人物动画

  17. # 状态动画z坐标为self.z - 200,动画名字中包含"XM"二字为状态动画

  18. # 优先级为 SM动画(self.z + 6) > 普通动画(self.z) > XM动画(self.z - 200)
  19. #----------------------------------------------------------------

  20. module RPG
  21.   class Sprite < ::Sprite
  22.     if @hzhj_alias_method_for_state_animation.nil?
  23.       alias hzhj_old_ini_for_state_animation initialize
  24.       alias hzhj_old_update_for_state_animation update
  25.       alias hzhj_old_x_for_state_animation x=
  26.       alias hzhj_old_y_for_state_animation y=
  27.       @hzhj_alias_method_for_state_animation = true
  28.     end
  29.     def initialize(*args)
  30.       @hzhj_loop_animations = []
  31.       @hzhj_loop_sprites = {}
  32.       @hzhj_loop_index = {}
  33.       hzhj_old_ini_for_state_animation(*args)
  34.     end
  35.     def animation(animation, hit, user=nil)
  36.       dispose_animation
  37.       @_animation = animation
  38.       return if @_animation == nil
  39.       @_animation_hit = hit
  40.       @_animation_duration = @_animation.frame_max
  41.       animation_name = @_animation.animation_name
  42.       animation_hue = @_animation.animation_hue

  43.       #----------------------------------------------------------------
  44.       # #【战斗图色相关联动画色相】
  45.       unless user.nil?
  46.         if user.is_a?(Game_Actor)
  47.           if ANIMATION_ACTOR.keys.include?(user.id)
  48.             animation_hue = user.battler_hue if ANIMATION_ACTOR[user.id].include?(animation.id)
  49.           end
  50.         else
  51.           if ANIMATION_ENEMY.keys.include?(user.id)
  52.             animation_hue = user.battler_hue if ANIMATION_ENEMY[user.id].include?(animation.id)
  53.           end
  54.         end
  55.       end      
  56.       #----------------------------------------------------------------

  57.       bitmap = RPG::Cache.animation(animation_name, animation_hue)
  58.       if @@_reference_count.include?(bitmap)
  59.         @@_reference_count[bitmap] += 1
  60.       else
  61.         @@_reference_count[bitmap] = 1
  62.       end
  63.       @_animation_sprites = []
  64.       if @_animation.position != 3 or not @@_animations.include?(animation)
  65.         for i in 0..15
  66.           sprite = ::Sprite.new(self.viewport)
  67.           sprite.bitmap = bitmap
  68.           sprite.visible = false

  69.           # 当战斗者为角色的情况
  70.           if @battler.is_a?(Game_Actor)
  71.              self.z = @battler.s_y + 100
  72.           # 当战斗者为敌人的情况
  73.           elsif @battler.is_a?(Game_Enemy)
  74.              self.z = @battler.screen_y + 100
  75.           else
  76.              self.z = 10+1000 # 平时【非战斗】
  77.           end         
  78.           # 默认动画 Z坐标★★★★★★★★★★★★★★★★★
  79.           sprite.z = self.z

  80.           @_animation_sprites.push(sprite)
  81.         end
  82.         unless @@_animations.include?(animation)
  83.           @@_animations.push(animation)
  84.         end
  85.       end
  86.       update_animation
  87.     end

  88.     def loop_animation(animation)
  89.       return if @hzhj_loop_animations.include?(animation)
  90.       if animation.nil?
  91.         dispose_loop_animation
  92.         return
  93.       end
  94.       @hzhj_loop_animations.push(animation)
  95.       @hzhj_loop_index[animation] = 0
  96.       animation_name = animation.animation_name
  97.       animation_hue = animation.animation_hue
  98.       bitmap = RPG::Cache.animation(animation_name, animation_hue)
  99.       if @@_reference_count.include?(bitmap)
  100.         @@_reference_count[bitmap] += 1
  101.       else
  102.         @@_reference_count[bitmap] = 1
  103.       end
  104.       loop_animation_sprites = []
  105.       for i in 0..15
  106.         sprite = ::Sprite.new(self.viewport)
  107.         sprite.bitmap = bitmap

  108.         # 当战斗者为角色的情况
  109.         if @battler.is_a?(Game_Actor)
  110.            self.z = @battler.s_y + 100
  111.         # 当战斗者为敌人的情况
  112.         elsif @battler.is_a?(Game_Enemy)
  113.            self.z = @battler.screen_y + 100
  114.         else
  115.            self.z = 10
  116.         end
  117.         # 默认动画 Z坐标★★★★★★★★★★★★★★★★★
  118.         sprite.z = self.z
  119.         # 调整动画名字前面带 "SM" 的动画的 Z坐标★★★★★★★★★★★★★★★★★
  120.         sprite.z = self.z + 1 if animation.name.include?("SM")

  121.         sprite.visible = false
  122.         loop_animation_sprites.push(sprite)
  123.       end
  124.       @hzhj_loop_sprites[animation] = loop_animation_sprites
  125.       update_loop_animation
  126.     end
  127.     def dispose_loop_animation
  128.       if not @hzhj_loop_animations.empty?
  129.         for sprites in @hzhj_loop_sprites.values
  130.           next if sprites.nil?
  131.           sprite = sprites[0]
  132.           if sprite != nil
  133.             @@_reference_count[sprite.bitmap] -= 1
  134.             if @@_reference_count[sprite.bitmap] == 0
  135.               sprite.bitmap.dispose
  136.             end
  137.           end
  138.           for sprite in sprites
  139.             sprite.dispose
  140.           end
  141.         end
  142.         @hzhj_loop_index.clear
  143.         @hzhj_loop_sprites.clear
  144.         @hzhj_loop_animations.clear
  145.       end
  146.     end
  147.     def update
  148.       hzhj_old_update_for_state_animation
  149.       # 调整状态动画的刷新速度,修改 Graphics.frame_count % 2 == 0
  150.       if not @hzhj_loop_animations.empty? and (Graphics.frame_count % 2 == 0)
  151.         update_loop_animation
  152.         for animation in @hzhj_loop_animations
  153.           @hzhj_loop_index[animation] += 1
  154.           @hzhj_loop_index[animation] %= animation.frame_max
  155.         end
  156.       end
  157.     end
  158.     def update_loop_animation
  159.       # 死亡时状态动画的可见度
  160.       if @xiaoshi2 != nil and @xiaoshi2 > 255
  161.         @xiaoshi2 = 1
  162.         for animation in @hzhj_loop_animations
  163.           frame_index = @hzhj_loop_index[animation]
  164.           cell_data = animation.frames[frame_index].cell_data
  165.           position = animation.position
  166.           sprites = @hzhj_loop_sprites[animation]
  167.           animation_set_sprites(sprites, cell_data, position, true)
  168.         end
  169.       else
  170.         for animation in @hzhj_loop_animations
  171.           frame_index = @hzhj_loop_index[animation]
  172.           cell_data = animation.frames[frame_index].cell_data
  173.           position = animation.position
  174.           sprites = @hzhj_loop_sprites[animation]
  175.           hzhj = animation.name.clone
  176.           animation_set_sprites(sprites, cell_data, position, false, hzhj)
  177.           for timing in animation.timings
  178.             if timing.frame == frame_index
  179.               animation_process_timing(timing, true)
  180.             end
  181.           end
  182.         end
  183.       end
  184.     end
  185.     def x=(new_x)
  186.       sx = new_x - self.x
  187.       if sx != 0
  188.         if not @hzhj_loop_animations.empty?
  189.           for animation in @hzhj_loop_animations
  190.             for i in 0..15
  191.               @hzhj_loop_sprites[animation][i].x += sx
  192.             end
  193.           end
  194.         end
  195.       end
  196.       hzhj_old_x_for_state_animation(new_x)
  197.     end
  198.     def y=(new_y)
  199.       sy = new_y - self.y
  200.       if sy != 0
  201.         if not @hzhj_loop_animations.empty?
  202.           for animation in @hzhj_loop_animations
  203.             for i in 0..15
  204.               @hzhj_loop_sprites[animation][i].y += sy
  205.             end
  206.           end
  207.         end
  208.       end
  209.       hzhj_old_y_for_state_animation(new_y)
  210.     end
  211.     def stop_loop_animation(animation)
  212.       return if not @hzhj_loop_animations.include?(animation)
  213.       if not @battler.nil?
  214.         for i in @battler.states
  215.           next if $data_states[i].nil?
  216.           if $data_states[i].animation_id == animation.id
  217.             return
  218.           end
  219.         end
  220.       end
  221.       sprites = @hzhj_loop_sprites[animation]
  222.       sprite = sprites[0]
  223.       if sprite != nil
  224.         @@_reference_count[sprite.bitmap] -= 1
  225.         if @@_reference_count[sprite.bitmap] == 0
  226.           sprite.bitmap.dispose
  227.         end
  228.       end
  229.       for sprite in sprites
  230.         sprite.dispose
  231.       end
  232.       @hzhj_loop_index[animation] = 0
  233.       @hzhj_loop_sprites[animation] = nil
  234.       @hzhj_loop_animations.delete(animation)
  235.     end
  236.     def animation_set_sprites(sprites, cell_data, position,kds = false, hzhj = nil)
  237.       if kds
  238.         for i in 0..15
  239.           sprites[i].visible = false
  240.         end
  241.         return
  242.       end
  243.       for i in 0..15
  244.         sprite = sprites[i]
  245.         pattern = cell_data[i, 0]
  246.         if sprite == nil or pattern == nil or pattern == -1
  247.           sprite.visible = false if sprite != nil
  248.           next
  249.         end
  250.         sprite.visible = true
  251.         sprite.src_rect.set(pattern % 5 * 192, pattern / 5 * 192, 192, 192)
  252.         if position == 3
  253.           if self.viewport != nil
  254.             sprite.x = self.viewport.rect.width / 2
  255.             sprite.y = self.viewport.rect.height - 160
  256.           else
  257.             sprite.x = 320
  258.             sprite.y = 240
  259.           end
  260.         else
  261.           sprite.x = self.x - self.ox + self.src_rect.width / 2
  262.           sprite.y = self.y - self.oy + self.src_rect.height / 2
  263.           sprite.y -= self.src_rect.height / 4 if position == 0
  264.           sprite.y += self.src_rect.height / 4 if position == 2
  265.         end
  266.         sprite.x += cell_data[i, 1]
  267.         sprite.y += cell_data[i, 2]

  268.         # 当战斗者为角色的情况
  269.         if @battler.is_a?(Game_Actor)
  270.            self.z = @battler.s_y + 100
  271.         # 当战斗者为敌人的情况   
  272.         elsif @battler.is_a?(Game_Enemy)
  273.            self.z = @battler.screen_y + 100
  274.         else
  275.            self.z = 10
  276.         end

  277.         if position == 1 and not hzhj.nil? and hzhj[0, 2] == "XM"
  278.         # 调整动画名字前面带 "XM" 的动画的 Z坐标 显示在战斗图下方  
  279.           sprite.z = self.z - 200
  280.         end

  281.         # > 粗暴式修正,有调试需求改下方增加的数值 <
  282.         if position == 1 and not hzhj.nil? and hzhj[0, 2] == "SM"
  283.         # 调整动画名字前面带 "SM" 的动画的 Z坐标 显示在战斗图上方  
  284.           z_plus = 6 # 最佳值
  285.           sprite.z = self.z + z_plus
  286.         end
  287. ########################################################################      
  288.          # > 粗暴式修正,有调试需求改下方增加的数值 <
  289.         if position == 1 and not hzhj.nil? and hzhj[0, 2] == "FS"
  290.         # 调整动画名字前面带 "SM" 的动画的 Z坐标 显示在战斗图上方  
  291.           z_plus = 12 # 最佳值
  292.           sprite.z = self.z + z_plus
  293.         end
  294. ##########################################################################
  295.         sprite.ox = 96
  296.         sprite.oy = 96
  297.         sprite.zoom_x = cell_data[i, 3] / 100.0
  298.         sprite.zoom_y = cell_data[i, 3] / 100.0
  299.         sprite.angle = cell_data[i, 4]
  300.         sprite.mirror = (cell_data[i, 5] == 1)
  301.         sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
  302.         sprite.blend_type = cell_data[i, 7]
  303.       end
  304.     end
  305.   end
  306. end
  307. #==============================================================================
  308. # ■ Game_Battler
  309. #==============================================================================

  310. class Game_Battler
  311.   if @hzhj_alias_method_for_state_animation.nil?
  312.     alias hzhj_old_ini_gb_state_animation initialize
  313.     alias hzhj_old_add_state add_state
  314.     alias hzhj_old_remove_state remove_state
  315.     @hzhj_alias_method_for_state_animation = true
  316.   end
  317.   #--------------------------------------------------------------------------
  318.   # ● 定义实例变量
  319.   #--------------------------------------------------------------------------
  320.   attr_reader   :hzhj_add_state_id
  321.   attr_reader   :hzhj_remove_state_id
  322.   #--------------------------------------------------------------------------
  323.   # ● 初始化对像
  324.   #--------------------------------------------------------------------------
  325.   def initialize
  326.     @hzhj_add_state_id = []
  327.     @hzhj_remove_state_id = []
  328.     hzhj_old_ini_gb_state_animation
  329.   end
  330.   #--------------------------------------------------------------------------
  331.   # ● 附加状态
  332.   #--------------------------------------------------------------------------
  333.   def add_state(state_id, force = false)
  334.     old_states = @states.clone
  335.     hzhj_old_add_state(state_id, force)
  336.     return if old_states == @states
  337.     zjdzt = (@states | old_states) & @states
  338.     jsdzt = (@states | old_states) & old_states
  339.     for i in zjdzt
  340.       if $data_states[i].animation_id > 0
  341.         if not @hzhj_add_state_id.include?(i)
  342.           @hzhj_add_state_id.push(i)
  343.         end
  344.       end
  345.     end
  346.     for i in jsdzt
  347.       if $data_states[i].animation_id > 0
  348.         if not @hzhj_remove_state_id.include?(i)
  349.           @hzhj_remove_state_id.push(i)
  350.         end
  351.       end
  352.     end
  353.   end
  354.   #--------------------------------------------------------------------------
  355.   # ● 解除状态
  356.   #--------------------------------------------------------------------------
  357.   def remove_state(state_id, force = false)
  358.     old_states = @states.clone
  359.     hzhj_old_remove_state(state_id, force)
  360.     return if old_states == @states
  361.     zjdzt = (@states | old_states) & @states
  362.     jsdzt = (@states | old_states) & old_states
  363.     for i in zjdzt
  364.       if $data_states[i].animation_id > 0
  365.         if not @hzhj_add_state_id.include?(i)
  366.           @hzhj_add_state_id.push(i)
  367.         end
  368.       end
  369.     end
  370.     for i in jsdzt
  371.       if $data_states[i].animation_id > 0
  372.         if not @hzhj_remove_state_id.include?(i)
  373.           @hzhj_remove_state_id.push(i)
  374.         end
  375.       end
  376.     end
  377.   end
  378. end
  379. #==============================================================================
  380. # ■ Sprite_Battler
  381. #==============================================================================

  382. class Sprite_Battler < RPG::Sprite
  383.   if @hzhj_alias_sb_for_state_animation.nil?
  384.     alias hzhj_old_init_sb_for_state_animation initialize
  385.     alias hzhj_old_update_sb_for_state_animation update
  386.     @hzhj_alias_sb_for_state_animation = true
  387.   end
  388.   #--------------------------------------------------------------------------
  389.   # ● 初始化
  390.   #--------------------------------------------------------------------------
  391.   def initialize(*args)
  392.     hzhj_old_init_sb_for_state_animation(*args)
  393.     if not @battler.nil?
  394.       @battler.hzhj_add_state_id.clear
  395.       @battler.hzhj_remove_state_id.clear
  396.       for i in @battler.states
  397.         next if $data_states[i].nil?
  398.         next if $data_states[i].animation_id == 0
  399.         next if $data_animations[$data_states[i].animation_id].nil?
  400.         @battler.hzhj_add_state_id.push(i)
  401.       end
  402.     end
  403.   end
  404.   #--------------------------------------------------------------------------
  405.   # ● 刷新
  406.   #--------------------------------------------------------------------------
  407.   def update
  408.     hzhj_old_update_sb_for_state_animation
  409.     if not @battler.nil?
  410.       if @battler.damage.nil?
  411.         if not @battler.hzhj_add_state_id.empty?
  412.           for i in @battler.hzhj_add_state_id
  413.             if @battler.state?(i)
  414.               animation_id = $data_states[i].animation_id
  415.               animation = $data_animations[animation_id]
  416.               loop_animation(animation) if not animation.nil?
  417.             end
  418.           end
  419.           @battler.hzhj_add_state_id.clear
  420.         end
  421.         if not @battler.hzhj_remove_state_id.empty?
  422.           for i in @battler.hzhj_remove_state_id
  423.             if not @battler.state?(i)
  424.               animation_id = $data_states[i].animation_id
  425.               animation = $data_animations[animation_id]
  426.               stop_loop_animation(animation) if not animation.nil?
  427.             end
  428.           end
  429.           @battler.hzhj_remove_state_id.clear
  430.         end
  431.       end
  432.     end
  433.   end
  434. end
复制代码

点评

Spriteset_Battle的初化有Z坐标..你可以研究一下  发表于 2022-9-3 19:16
这个..可能要改精灵的视口吧  发表于 2022-9-3 19:15
状态动画和法术动画,我想新加上1种动画显示到状态动画上面,现在的情况是,状态动画覆盖住了法术动画  发表于 2022-9-3 15:32
你的动画不是同一类吗?  发表于 2022-9-3 13:57
我最开始也是这么修改的,新增加1个Z坐标,不过显示的时候,带有FS字符的动画还是显示在SM动画的下面,我甚至把Z坐标改成9999了,但还是没用  发表于 2022-9-3 13:25
回复

使用道具 举报

梦石
0
星屑
14720
在线时间
2175 小时
注册时间
2016-9-20
回帖
777
发表于 2022-9-3 18:51:56 | 显示全部楼层
129到132行好像也是要添加一个你想加入新的判断进去改 , 比如sprite.z = self.z - 1 if animation.name.include?("XM"),  
另外楼主的图片看了我不懂, 是蓝色灯带串那个东西, 还是白色光效谁是状态法术,

点评

解决了,在88行下面添加了一个判定,感谢解答  发表于 2022-9-3 19:54
贴子只供参考我贴子内容有很多只是我自己标识的内容代指不是原来意思,偏向发贴当时的想法(后来回看贴发现有很多错误,会造成误导 ),如果想靠谱点应 找相关正确的文章   -- 2025/4/19
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部