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

Project1

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

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

[复制链接]

Lv3.寻梦者

梦石
0
星屑
3576
在线时间
1890 小时
注册时间
2010-6-19
帖子
1210
跳转到指定楼层
1
发表于 2022-9-2 21:08:47 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

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

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

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


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


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






用了多动画状态脚本,在里面设置了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
但是显示的效果还是一样,法术动画被状态动画给挡住了



RUBY 代码复制
  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.  
  15. # 在状态库和动画库的名称开头,加上XM,便使该ID动画Z坐标下降
  16.  
  17. # 普通动画z坐标为self.z
  18.  
  19. # 状态动画z坐标为self.z + 6,  动画名字中包含"SM"二字为人物动画
  20.  
  21. # 状态动画z坐标为self.z - 200,动画名字中包含"XM"二字为状态动画
  22.  
  23. # 优先级为 SM动画(self.z + 6) > 普通动画(self.z) > XM动画(self.z - 200)
  24. #----------------------------------------------------------------
  25.  
  26. module RPG
  27.   class Sprite < ::Sprite
  28.     if @hzhj_alias_method_for_state_animation.nil?
  29.       alias hzhj_old_ini_for_state_animation initialize
  30.       alias hzhj_old_update_for_state_animation update
  31.       alias hzhj_old_x_for_state_animation x=
  32.       alias hzhj_old_y_for_state_animation y=
  33.       @hzhj_alias_method_for_state_animation = true
  34.     end
  35.     def initialize(*args)
  36.       @hzhj_loop_animations = []
  37.       @hzhj_loop_sprites = {}
  38.       @hzhj_loop_index = {}
  39.       hzhj_old_ini_for_state_animation(*args)
  40.     end
  41.     def animation(animation, hit, user=nil)
  42.       dispose_animation
  43.       @_animation = animation
  44.       return if @_animation == nil
  45.       @_animation_hit = hit
  46.       @_animation_duration = @_animation.frame_max
  47.       animation_name = @_animation.animation_name
  48.       animation_hue = @_animation.animation_hue
  49.  
  50.       #----------------------------------------------------------------
  51.       # #【战斗图色相关联动画色相】
  52.       unless user.nil?
  53.         if user.is_a?(Game_Actor)
  54.           if ANIMATION_ACTOR.keys.include?(user.id)
  55.             animation_hue = user.battler_hue if ANIMATION_ACTOR[user.id].include?(animation.id)
  56.           end
  57.         else
  58.           if ANIMATION_ENEMY.keys.include?(user.id)
  59.             animation_hue = user.battler_hue if ANIMATION_ENEMY[user.id].include?(animation.id)
  60.           end
  61.         end
  62.       end      
  63.       #----------------------------------------------------------------
  64.  
  65.       bitmap = RPG::Cache.animation(animation_name, animation_hue)
  66.       if @@_reference_count.include?(bitmap)
  67.         @@_reference_count[bitmap] += 1
  68.       else
  69.         @@_reference_count[bitmap] = 1
  70.       end
  71.       @_animation_sprites = []
  72.       if @_animation.position != 3 or not @@_animations.include?(animation)
  73.         for i in 0..15
  74.           sprite = ::Sprite.new(self.viewport)
  75.           sprite.bitmap = bitmap
  76.           sprite.visible = false
  77.  
  78.           # 当战斗者为角色的情况
  79.           if @battler.is_a?(Game_Actor)
  80.              self.z = @battler.s_y + 100
  81.           # 当战斗者为敌人的情况
  82.           elsif @battler.is_a?(Game_Enemy)
  83.              self.z = @battler.screen_y + 100
  84.           else
  85.              self.z = 10+1000 # 平时【非战斗】
  86.           end         
  87.           # 默认动画 Z坐标★★★★★★★★★★★★★★★★★
  88.           sprite.z = self.z
  89.  
  90.           @_animation_sprites.push(sprite)
  91.         end
  92.         unless @@_animations.include?(animation)
  93.           @@_animations.push(animation)
  94.         end
  95.       end
  96.       update_animation
  97.     end
  98.  
  99.     def loop_animation(animation)
  100.       return if @hzhj_loop_animations.include?(animation)
  101.       if animation.nil?
  102.         dispose_loop_animation
  103.         return
  104.       end
  105.       @hzhj_loop_animations.push(animation)
  106.       @hzhj_loop_index[animation] = 0
  107.       animation_name = animation.animation_name
  108.       animation_hue = animation.animation_hue
  109.       bitmap = RPG::Cache.animation(animation_name, animation_hue)
  110.       if @@_reference_count.include?(bitmap)
  111.         @@_reference_count[bitmap] += 1
  112.       else
  113.         @@_reference_count[bitmap] = 1
  114.       end
  115.       loop_animation_sprites = []
  116.       for i in 0..15
  117.         sprite = ::Sprite.new(self.viewport)
  118.         sprite.bitmap = bitmap
  119.  
  120.         # 当战斗者为角色的情况
  121.         if @battler.is_a?(Game_Actor)
  122.            self.z = @battler.s_y + 100
  123.         # 当战斗者为敌人的情况
  124.         elsif @battler.is_a?(Game_Enemy)
  125.            self.z = @battler.screen_y + 100
  126.         else
  127.            self.z = 10
  128.         end
  129.         # 默认动画 Z坐标★★★★★★★★★★★★★★★★★
  130.         sprite.z = self.z
  131.         # 调整动画名字前面带 "SM" 的动画的 Z坐标★★★★★★★★★★★★★★★★★
  132.         sprite.z = self.z + 1 if animation.name.include?("SM")
  133.  
  134.         sprite.visible = false
  135.         loop_animation_sprites.push(sprite)
  136.       end
  137.       @hzhj_loop_sprites[animation] = loop_animation_sprites
  138.       update_loop_animation
  139.     end
  140.     def dispose_loop_animation
  141.       if not @hzhj_loop_animations.empty?
  142.         for sprites in @hzhj_loop_sprites.values
  143.           next if sprites.nil?
  144.           sprite = sprites[0]
  145.           if sprite != nil
  146.             @@_reference_count[sprite.bitmap] -= 1
  147.             if @@_reference_count[sprite.bitmap] == 0
  148.               sprite.bitmap.dispose
  149.             end
  150.           end
  151.           for sprite in sprites
  152.             sprite.dispose
  153.           end
  154.         end
  155.         @hzhj_loop_index.clear
  156.         @hzhj_loop_sprites.clear
  157.         @hzhj_loop_animations.clear
  158.       end
  159.     end
  160.     def update
  161.       hzhj_old_update_for_state_animation
  162.       # 调整状态动画的刷新速度,修改 Graphics.frame_count % 2 == 0
  163.       if not @hzhj_loop_animations.empty? and (Graphics.frame_count % 2 == 0)
  164.         update_loop_animation
  165.         for animation in @hzhj_loop_animations
  166.           @hzhj_loop_index[animation] += 1
  167.           @hzhj_loop_index[animation] %= animation.frame_max
  168.         end
  169.       end
  170.     end
  171.     def update_loop_animation
  172.       # 死亡时状态动画的可见度
  173.       if @xiaoshi2 != nil and @xiaoshi2 > 255
  174.         @xiaoshi2 = 1
  175.         for animation in @hzhj_loop_animations
  176.           frame_index = @hzhj_loop_index[animation]
  177.           cell_data = animation.frames[frame_index].cell_data
  178.           position = animation.position
  179.           sprites = @hzhj_loop_sprites[animation]
  180.           animation_set_sprites(sprites, cell_data, position, true)
  181.         end
  182.       else
  183.         for animation in @hzhj_loop_animations
  184.           frame_index = @hzhj_loop_index[animation]
  185.           cell_data = animation.frames[frame_index].cell_data
  186.           position = animation.position
  187.           sprites = @hzhj_loop_sprites[animation]
  188.           hzhj = animation.name.clone
  189.           animation_set_sprites(sprites, cell_data, position, false, hzhj)
  190.           for timing in animation.timings
  191.             if timing.frame == frame_index
  192.               animation_process_timing(timing, true)
  193.             end
  194.           end
  195.         end
  196.       end
  197.     end
  198.     def x=(new_x)
  199.       sx = new_x - self.x
  200.       if sx != 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].x += sx
  205.             end
  206.           end
  207.         end
  208.       end
  209.       hzhj_old_x_for_state_animation(new_x)
  210.     end
  211.     def y=(new_y)
  212.       sy = new_y - self.y
  213.       if sy != 0
  214.         if not @hzhj_loop_animations.empty?
  215.           for animation in @hzhj_loop_animations
  216.             for i in 0..15
  217.               @hzhj_loop_sprites[animation][i].y += sy
  218.             end
  219.           end
  220.         end
  221.       end
  222.       hzhj_old_y_for_state_animation(new_y)
  223.     end
  224.     def stop_loop_animation(animation)
  225.       return if not @hzhj_loop_animations.include?(animation)
  226.       if not @battler.nil?
  227.         for i in @battler.states
  228.           next if $data_states[i].nil?
  229.           if $data_states[i].animation_id == animation.id
  230.             return
  231.           end
  232.         end
  233.       end
  234.       sprites = @hzhj_loop_sprites[animation]
  235.       sprite = sprites[0]
  236.       if sprite != nil
  237.         @@_reference_count[sprite.bitmap] -= 1
  238.         if @@_reference_count[sprite.bitmap] == 0
  239.           sprite.bitmap.dispose
  240.         end
  241.       end
  242.       for sprite in sprites
  243.         sprite.dispose
  244.       end
  245.       @hzhj_loop_index[animation] = 0
  246.       @hzhj_loop_sprites[animation] = nil
  247.       @hzhj_loop_animations.delete(animation)
  248.     end
  249.     def animation_set_sprites(sprites, cell_data, position,kds = false, hzhj = nil)
  250.       if kds
  251.         for i in 0..15
  252.           sprites[i].visible = false
  253.         end
  254.         return
  255.       end
  256.       for i in 0..15
  257.         sprite = sprites[i]
  258.         pattern = cell_data[i, 0]
  259.         if sprite == nil or pattern == nil or pattern == -1
  260.           sprite.visible = false if sprite != nil
  261.           next
  262.         end
  263.         sprite.visible = true
  264.         sprite.src_rect.set(pattern % 5 * 192, pattern / 5 * 192, 192, 192)
  265.         if position == 3
  266.           if self.viewport != nil
  267.             sprite.x = self.viewport.rect.width / 2
  268.             sprite.y = self.viewport.rect.height - 160
  269.           else
  270.             sprite.x = 320
  271.             sprite.y = 240
  272.           end
  273.         else
  274.           sprite.x = self.x - self.ox + self.src_rect.width / 2
  275.           sprite.y = self.y - self.oy + self.src_rect.height / 2
  276.           sprite.y -= self.src_rect.height / 4 if position == 0
  277.           sprite.y += self.src_rect.height / 4 if position == 2
  278.         end
  279.         sprite.x += cell_data[i, 1]
  280.         sprite.y += cell_data[i, 2]
  281.  
  282.         # 当战斗者为角色的情况
  283.         if @battler.is_a?(Game_Actor)
  284.            self.z = @battler.s_y + 100
  285.         # 当战斗者为敌人的情况   
  286.         elsif @battler.is_a?(Game_Enemy)
  287.            self.z = @battler.screen_y + 100
  288.         else
  289.            self.z = 10
  290.         end
  291.  
  292.         if position == 1 and not hzhj.nil? and hzhj[0, 2] == "XM"
  293.         # 调整动画名字前面带 "XM" 的动画的 Z坐标 显示在战斗图下方  
  294.           sprite.z = self.z - 200
  295.         end
  296.  
  297.         # > 粗暴式修正,有调试需求改下方增加的数值 <
  298.         if position == 1 and not hzhj.nil? and hzhj[0, 2] == "SM"
  299.         # 调整动画名字前面带 "SM" 的动画的 Z坐标 显示在战斗图上方  
  300.           z_plus = 6 # 最佳值
  301.           sprite.z = self.z + z_plus
  302.         end
  303.  
  304.         sprite.ox = 96
  305.         sprite.oy = 96
  306.         sprite.zoom_x = cell_data[i, 3] / 100.0
  307.         sprite.zoom_y = cell_data[i, 3] / 100.0
  308.         sprite.angle = cell_data[i, 4]
  309.         sprite.mirror = (cell_data[i, 5] == 1)
  310.         sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
  311.         sprite.blend_type = cell_data[i, 7]
  312.       end
  313.     end
  314.   end
  315. end
  316. #==============================================================================
  317. # ■ Game_Battler
  318. #==============================================================================
  319.  
  320. class Game_Battler
  321.   if @hzhj_alias_method_for_state_animation.nil?
  322.     alias hzhj_old_ini_gb_state_animation initialize
  323.     alias hzhj_old_add_state add_state
  324.     alias hzhj_old_remove_state remove_state
  325.     @hzhj_alias_method_for_state_animation = true
  326.   end
  327.   #--------------------------------------------------------------------------
  328.   # ● 定义实例变量
  329.   #--------------------------------------------------------------------------
  330.   attr_reader   :hzhj_add_state_id
  331.   attr_reader   :hzhj_remove_state_id
  332.   #--------------------------------------------------------------------------
  333.   # ● 初始化对像
  334.   #--------------------------------------------------------------------------
  335.   def initialize
  336.     @hzhj_add_state_id = []
  337.     @hzhj_remove_state_id = []
  338.     hzhj_old_ini_gb_state_animation
  339.   end
  340.   #--------------------------------------------------------------------------
  341.   # ● 附加状态
  342.   #--------------------------------------------------------------------------
  343.   def add_state(state_id, force = false)
  344.     old_states = @states.clone
  345.     hzhj_old_add_state(state_id, force)
  346.     return if old_states == @states
  347.     zjdzt = (@states | old_states) & @states
  348.     jsdzt = (@states | old_states) & old_states
  349.     for i in zjdzt
  350.       if $data_states[i].animation_id > 0
  351.         if not @hzhj_add_state_id.include?(i)
  352.           @hzhj_add_state_id.push(i)
  353.         end
  354.       end
  355.     end
  356.     for i in jsdzt
  357.       if $data_states[i].animation_id > 0
  358.         if not @hzhj_remove_state_id.include?(i)
  359.           @hzhj_remove_state_id.push(i)
  360.         end
  361.       end
  362.     end
  363.   end
  364.   #--------------------------------------------------------------------------
  365.   # ● 解除状态
  366.   #--------------------------------------------------------------------------
  367.   def remove_state(state_id, force = false)
  368.     old_states = @states.clone
  369.     hzhj_old_remove_state(state_id, force)
  370.     return if old_states == @states
  371.     zjdzt = (@states | old_states) & @states
  372.     jsdzt = (@states | old_states) & old_states
  373.     for i in zjdzt
  374.       if $data_states[i].animation_id > 0
  375.         if not @hzhj_add_state_id.include?(i)
  376.           @hzhj_add_state_id.push(i)
  377.         end
  378.       end
  379.     end
  380.     for i in jsdzt
  381.       if $data_states[i].animation_id > 0
  382.         if not @hzhj_remove_state_id.include?(i)
  383.           @hzhj_remove_state_id.push(i)
  384.         end
  385.       end
  386.     end
  387.   end
  388. end
  389. #==============================================================================
  390. # ■ Sprite_Battler
  391. #==============================================================================
  392.  
  393. class Sprite_Battler < RPG::Sprite
  394.   if @hzhj_alias_sb_for_state_animation.nil?
  395.     alias hzhj_old_init_sb_for_state_animation initialize
  396.     alias hzhj_old_update_sb_for_state_animation update
  397.     @hzhj_alias_sb_for_state_animation = true
  398.   end
  399.   #--------------------------------------------------------------------------
  400.   # ● 初始化
  401.   #--------------------------------------------------------------------------
  402.   def initialize(*args)
  403.     hzhj_old_init_sb_for_state_animation(*args)
  404.     if not @battler.nil?
  405.       @battler.hzhj_add_state_id.clear
  406.       @battler.hzhj_remove_state_id.clear
  407.       for i in @battler.states
  408.         next if $data_states[i].nil?
  409.         next if $data_states[i].animation_id == 0
  410.         next if $data_animations[$data_states[i].animation_id].nil?
  411.         @battler.hzhj_add_state_id.push(i)
  412.       end
  413.     end
  414.   end
  415.   #--------------------------------------------------------------------------
  416.   # ● 刷新
  417.   #--------------------------------------------------------------------------
  418.   def update
  419.     hzhj_old_update_sb_for_state_animation
  420.     if not @battler.nil?
  421.       if @battler.damage.nil?
  422.         if not @battler.hzhj_add_state_id.empty?
  423.           for i in @battler.hzhj_add_state_id
  424.             if @battler.state?(i)
  425.               animation_id = $data_states[i].animation_id
  426.               animation = $data_animations[animation_id]
  427.               loop_animation(animation) if not animation.nil?
  428.             end
  429.           end
  430.           @battler.hzhj_add_state_id.clear
  431.         end
  432.         if not @battler.hzhj_remove_state_id.empty?
  433.           for i in @battler.hzhj_remove_state_id
  434.             if not @battler.state?(i)
  435.               animation_id = $data_states[i].animation_id
  436.               animation = $data_animations[animation_id]
  437.               stop_loop_animation(animation) if not animation.nil?
  438.             end
  439.           end
  440.           @battler.hzhj_remove_state_id.clear
  441.         end
  442.       end
  443.     end
  444.   end
  445. end

Lv3.寻梦者

梦石
0
星屑
3086
在线时间
180 小时
注册时间
2020-8-9
帖子
119
2
发表于 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
回复 支持 反对

使用道具 举报

Lv4.逐梦者

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

点评

解决了,在88行下面添加了一个判定,感谢解答  发表于 2022-9-3 19:54
我发的贴子大多未经整理是草稿抱歉
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-1 13:36

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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