Project1

标题: 动画Z坐标位置问题 [打印本页]

作者: 黑米馒头    时间: 2014-7-16 09:01
标题: 动画Z坐标位置问题
本帖最后由 黑米馒头 于 2014-7-16 09:01 编辑

发现真移位脚本有个问题,
就是当角色或敌人身上附加1个【状态动画】的时候,
攻击对方时角色战斗图会显示在状态动画的上面,
移动的时候会恢复正常。

这是正常情况


一攻击就这样了



来个大侠帮忙看下,谢谢啦

范例:
战斗时候真移位02.rar (640.59 KB, 下载次数: 77)
作者: 克莉丝    时间: 2014-7-16 11:46
改变人物动画z坐标为2000,非人物动画设定为3000,状态动画z坐标为2500

判断是否为人物动画的依据是动画名字,名字中包含"角色"二字则放在状态动画下面,否则仍然在状态动画上面


脚本见附件
改写了 RPG::Sprite 下的
animation    loop_animation        animation_set_sprites
今后使用注意脚本冲突

脚本.rb

3.29 KB, 下载次数: 48


作者: 黑米馒头    时间: 2014-7-16 11:50
克莉丝 发表于 2014-7-16 11:46
改变人物动画z坐标为2000,非人物动画设定为3000,状态动画z坐标为2500

判断是否为人物动画的依据是动画名字 ...

附件怎么打开
作者: 黑米馒头    时间: 2014-7-16 11:53
克莉丝 发表于 2014-7-16 11:46
改变人物动画z坐标为2000,非人物动画设定为3000,状态动画z坐标为2500

判断是否为人物动画的依据是动画名字 ...

嗯,我看下,先谢谢了
作者: 黑米馒头    时间: 2014-7-16 12:40
克莉丝 发表于 2014-7-16 11:46
改变人物动画z坐标为2000,非人物动画设定为3000,状态动画z坐标为2500

判断是否为人物动画的依据是动画名字 ...

大侠能否在帮个忙,把下面的 【同时显示多个状态动画】的脚本和你刚改的那个脚本结合一下,2个脚本放一起有冲突,我自己看半天看不懂。

有空的时候帮忙看下,谢谢
  1. #使用方法
  2. #在状态库和动画库的名称开头,加上ST,便使该ID动画Z坐标下降
  3. #======================================================================
  4. # 脚本来自www.66rpg.com,使用或转载请保留此信息
  5. # 功能:多状态动画同时显示
  6. # 版本:2.01
  7. # 作者:后知后觉 2011-3-2
  8. # 使用方法:插入Main前即可
  9. # 冲突可能:只要在你的脚本编辑器内没有对 RPG::Sprite 或 Sprite_Battler 类
  10. #           以下三个方法做出过别的定义 则就有较大的兼容性
  11. #           loop_animation
  12. #           dispose_loop_animation
  13. #           update_loop_animation
  14. #======================================================================

  15. module RPG
  16.   class Sprite < ::Sprite
  17.     if @hzhj_alias_method_for_state_animation.nil?
  18.       alias hzhj_old_ini_for_state_animation initialize
  19.       alias hzhj_old_update_for_state_animation update
  20.       alias hzhj_old_x_for_state_animation x=
  21.       alias hzhj_old_y_for_state_animation y=
  22.       @hzhj_alias_method_for_state_animation = true
  23.     end
  24.     def initialize(*args)
  25.       @hzhj_loop_animations = []
  26.       @hzhj_loop_sprites = {}
  27.       @hzhj_loop_index = {}
  28.       hzhj_old_ini_for_state_animation(*args)
  29.     end
  30.     def loop_animation(animation)
  31.       return if @hzhj_loop_animations.include?(animation)
  32.       if animation.nil?
  33.         dispose_loop_animation
  34.         return
  35.       end
  36.       @hzhj_loop_animations.push(animation)
  37.       @hzhj_loop_index[animation] = 0
  38.       animation_name = animation.animation_name
  39.       animation_hue = animation.animation_hue
  40.       bitmap = RPG::Cache.animation(animation_name, animation_hue)
  41.       if @@_reference_count.include?(bitmap)
  42.         @@_reference_count[bitmap] += 1
  43.       else
  44.         @@_reference_count[bitmap] = 1
  45.       end
  46.       loop_animation_sprites = []
  47.       for i in 0..15
  48.         sprite = ::Sprite.new(self.viewport)
  49.         sprite.bitmap = bitmap
  50.         sprite.visible = false
  51.         loop_animation_sprites.push(sprite)
  52.       end
  53.       @hzhj_loop_sprites[animation] = loop_animation_sprites
  54.       update_loop_animation
  55.     end
  56.     def dispose_loop_animation
  57.       if not @hzhj_loop_animations.empty?
  58.         for sprites in @hzhj_loop_sprites.values
  59.           next if sprites.nil?
  60.           sprite = sprites[0]
  61.           if sprite != nil
  62.             @@_reference_count[sprite.bitmap] -= 1
  63.             if @@_reference_count[sprite.bitmap] == 0
  64.               sprite.bitmap.dispose
  65.             end
  66.           end
  67.           for sprite in sprites
  68.             sprite.dispose
  69.           end
  70.         end
  71.         @hzhj_loop_index.clear
  72.         @hzhj_loop_sprites.clear
  73.         @hzhj_loop_animations.clear
  74.       end
  75.     end
  76.     def update
  77.       hzhj_old_update_for_state_animation
  78.       if not @hzhj_loop_animations.empty? and (Graphics.frame_count % 2 == 0)
  79.         update_loop_animation
  80.         for animation in @hzhj_loop_animations
  81.           @hzhj_loop_index[animation] += 1
  82.           @hzhj_loop_index[animation] %= animation.frame_max
  83.         end
  84.       end
  85.     end
  86.     def update_loop_animation
  87.       if @xiaoshi2 != nil and @xiaoshi2 > 0
  88.         @xiaoshi2 -= 1
  89.         for animation in @hzhj_loop_animations
  90.           frame_index = @hzhj_loop_index[animation]
  91.           cell_data = animation.frames[frame_index].cell_data
  92.           position = animation.position
  93.           sprites = @hzhj_loop_sprites[animation]
  94.           animation_set_sprites(sprites, cell_data, position, true)
  95.         end
  96.       else
  97.         for animation in @hzhj_loop_animations
  98.           frame_index = @hzhj_loop_index[animation]
  99.           cell_data = animation.frames[frame_index].cell_data
  100.           position = animation.position
  101.           sprites = @hzhj_loop_sprites[animation]
  102.           hzhj = animation.name.clone
  103.           animation_set_sprites(sprites, cell_data, position, false, hzhj)
  104.           for timing in animation.timings
  105.             if timing.frame == frame_index
  106.               animation_process_timing(timing, true)
  107.             end
  108.           end
  109.         end
  110.       end
  111.     end
  112.     def x=(new_x)
  113.       sx = new_x - self.x
  114.       if sx != 0
  115.         if not @hzhj_loop_animations.empty?
  116.           for animation in @hzhj_loop_animations
  117.             for i in 0..15
  118.               @hzhj_loop_sprites[animation][i].x += sx
  119.             end
  120.           end
  121.         end
  122.       end
  123.       hzhj_old_x_for_state_animation(new_x)
  124.     end
  125.     def y=(new_y)
  126.       sy = new_y - self.y
  127.       if sy != 0
  128.         if not @hzhj_loop_animations.empty?
  129.           for animation in @hzhj_loop_animations
  130.             for i in 0..15
  131.               @hzhj_loop_sprites[animation][i].y += sy
  132.             end
  133.           end
  134.         end
  135.       end
  136.       hzhj_old_y_for_state_animation(new_y)
  137.     end
  138.     def stop_loop_animation(animation)
  139.       return if not @hzhj_loop_animations.include?(animation)
  140.       if not @battler.nil?
  141.         for i in @battler.states
  142.           next if $data_states[i].nil?
  143.           if $data_states[i].animation_id == animation.id
  144.             return
  145.           end
  146.         end
  147.       end
  148.       sprites = @hzhj_loop_sprites[animation]
  149.       sprite = sprites[0]
  150.       if sprite != nil
  151.         @@_reference_count[sprite.bitmap] -= 1
  152.         if @@_reference_count[sprite.bitmap] == 0
  153.           sprite.bitmap.dispose
  154.         end
  155.       end
  156.       for sprite in sprites
  157.         sprite.dispose
  158.       end
  159.       @hzhj_loop_index[animation] = 0
  160.       @hzhj_loop_sprites[animation] = nil
  161.       @hzhj_loop_animations.delete(animation)
  162.     end
  163.     def animation_set_sprites(sprites, cell_data, position,kds = false, hzhj = nil)
  164.       if kds
  165.         for i in 0..15
  166.           sprites[i].visible = false
  167.         end
  168.         return
  169.       end
  170.       for i in 0..15
  171.         sprite = sprites[i]
  172.         pattern = cell_data[i, 0]
  173.         if sprite == nil or pattern == nil or pattern == -1
  174.           sprite.visible = false if sprite != nil
  175.           next
  176.         end
  177.         sprite.visible = true
  178.         sprite.src_rect.set(pattern % 5 * 192, pattern / 5 * 192, 192, 192)
  179.         if position == 3
  180.           if self.viewport != nil
  181.             sprite.x = self.viewport.rect.width / 2
  182.             sprite.y = self.viewport.rect.height - 160
  183.           else
  184.             sprite.x = 320
  185.             sprite.y = 240
  186.           end
  187.         else
  188.           sprite.x = self.x - self.ox + self.src_rect.width / 2
  189.           sprite.y = self.y - self.oy + self.src_rect.height / 2
  190.           sprite.y -= self.src_rect.height / 4 if position == 0
  191.           sprite.y += self.src_rect.height / 4 if position == 2
  192.         end
  193.         sprite.x += cell_data[i, 1]
  194.         sprite.y += cell_data[i, 2]
  195.         sprite.z = self.z#2000
  196.         if position == 1 and not hzhj.nil? and hzhj[0, 2] == "ST"
  197.           sprite.z -= 2
  198.         end
  199.         sprite.ox = 96
  200.         sprite.oy = 96
  201.         sprite.zoom_x = cell_data[i, 3] / 100.0
  202.         sprite.zoom_y = cell_data[i, 3] / 100.0
  203.         sprite.angle = cell_data[i, 4]
  204.         sprite.mirror = (cell_data[i, 5] == 1)
  205.         sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
  206.         sprite.blend_type = cell_data[i, 7]
  207.       end
  208.     end
  209.   end
  210. end
  211. #==============================================================================
  212. # ■ Game_Battler
  213. #==============================================================================

  214. class Game_Battler
  215.   if @hzhj_alias_method_for_state_animation.nil?
  216.     alias hzhj_old_ini_gb_state_animation initialize
  217.     alias hzhj_old_add_state add_state
  218.     alias hzhj_old_remove_state remove_state
  219.     @hzhj_alias_method_for_state_animation = true
  220.   end
  221.   #--------------------------------------------------------------------------
  222.   # ● 定义实例变量
  223.   #--------------------------------------------------------------------------
  224.   attr_reader   :hzhj_add_state_id
  225.   attr_reader   :hzhj_remove_state_id
  226.   #--------------------------------------------------------------------------
  227.   # ● 初始化对像
  228.   #--------------------------------------------------------------------------
  229.   def initialize
  230.     @hzhj_add_state_id = []
  231.     @hzhj_remove_state_id = []
  232.     hzhj_old_ini_gb_state_animation
  233.   end
  234.   #--------------------------------------------------------------------------
  235.   # ● 附加状态
  236.   #--------------------------------------------------------------------------
  237.   def add_state(state_id, force = false)
  238.     old_states = @states.clone
  239.     hzhj_old_add_state(state_id, force)
  240.     return if old_states == @states
  241.     zjdzt = (@states | old_states) & @states
  242.     jsdzt = (@states | old_states) & old_states
  243.     for i in zjdzt
  244.       if $data_states[i].animation_id > 0
  245.         if not @hzhj_add_state_id.include?(i)
  246.           @hzhj_add_state_id.push(i)
  247.         end
  248.       end
  249.     end
  250.     for i in jsdzt
  251.       if $data_states[i].animation_id > 0
  252.         if not @hzhj_remove_state_id.include?(i)
  253.           @hzhj_remove_state_id.push(i)
  254.         end
  255.       end
  256.     end
  257.   end
  258.   #--------------------------------------------------------------------------
  259.   # ● 解除状态
  260.   #--------------------------------------------------------------------------
  261.   def remove_state(state_id, force = false)
  262.     old_states = @states.clone
  263.     hzhj_old_remove_state(state_id, force)
  264.     return if old_states == @states
  265.     zjdzt = (@states | old_states) & @states
  266.     jsdzt = (@states | old_states) & old_states
  267.     for i in zjdzt
  268.       if $data_states[i].animation_id > 0
  269.         if not @hzhj_add_state_id.include?(i)
  270.           @hzhj_add_state_id.push(i)
  271.         end
  272.       end
  273.     end
  274.     for i in jsdzt
  275.       if $data_states[i].animation_id > 0
  276.         if not @hzhj_remove_state_id.include?(i)
  277.           @hzhj_remove_state_id.push(i)
  278.         end
  279.       end
  280.     end
  281.   end
  282. end
  283. #==============================================================================
  284. # ■ Sprite_Battler
  285. #==============================================================================

  286. class Sprite_Battler < RPG::Sprite
  287.   if @hzhj_alias_sb_for_state_animation.nil?
  288.     alias hzhj_old_init_sb_for_state_animation initialize
  289.     alias hzhj_old_update_sb_for_state_animation update
  290.     @hzhj_alias_sb_for_state_animation = true
  291.   end
  292.   #--------------------------------------------------------------------------
  293.   # ● 初始化
  294.   #--------------------------------------------------------------------------
  295.   def initialize(*args)
  296.     hzhj_old_init_sb_for_state_animation(*args)
  297.     if not @battler.nil?
  298.       @battler.hzhj_add_state_id.clear
  299.       @battler.hzhj_remove_state_id.clear
  300.       for i in @battler.states
  301.         next if $data_states[i].nil?
  302.         next if $data_states[i].animation_id == 0
  303.         next if $data_animations[$data_states[i].animation_id].nil?
  304.         @battler.hzhj_add_state_id.push(i)
  305.       end
  306.     end
  307.   end
  308.   #--------------------------------------------------------------------------
  309.   # ● 刷新
  310.   #--------------------------------------------------------------------------
  311.   def update
  312.     hzhj_old_update_sb_for_state_animation
  313.     if not @battler.nil?
  314.       if @battler.damage.nil?
  315.         if not @battler.hzhj_add_state_id.empty?
  316.           for i in @battler.hzhj_add_state_id
  317.             if @battler.state?(i)
  318.               animation_id = $data_states[i].animation_id
  319.               animation = $data_animations[animation_id]
  320.               loop_animation(animation) if not animation.nil?
  321.             end
  322.           end
  323.           @battler.hzhj_add_state_id.clear
  324.         end
  325.         if not @battler.hzhj_remove_state_id.empty?
  326.           for i in @battler.hzhj_remove_state_id
  327.             if not @battler.state?(i)
  328.               animation_id = $data_states[i].animation_id
  329.               animation = $data_animations[animation_id]
  330.               stop_loop_animation(animation) if not animation.nil?
  331.             end
  332.           end
  333.           @battler.hzhj_remove_state_id.clear
  334.         end
  335.       end
  336.     end
  337.   end
  338. end
复制代码

作者: 克莉丝    时间: 2014-7-16 12:51
把原来我发给你的脚本删掉换上这个脚本.还没有测试多状态的效果请自行测试并反馈结果
  1. #使用方法
  2. #在状态库和动画库的名称开头,加上ST,便使该ID动画Z坐标下降
  3. #======================================================================
  4. # 脚本来自www.66rpg.com,使用或转载请保留此信息
  5. # 功能:多状态动画同时显示
  6. # 版本:2.01
  7. # 作者:后知后觉 2011-3-2
  8. # 使用方法:插入Main前即可
  9. # 冲突可能:只要在你的脚本编辑器内没有对 RPG::Sprite 或 Sprite_Battler 类
  10. #           以下三个方法做出过别的定义 则就有较大的兼容性
  11. #           loop_animation
  12. #           dispose_loop_animation
  13. #           update_loop_animation
  14. #======================================================================

  15. module RPG
  16.   class Sprite < ::Sprite
  17.     if @hzhj_alias_method_for_state_animation.nil?
  18.       alias hzhj_old_ini_for_state_animation initialize
  19.       alias hzhj_old_update_for_state_animation update
  20.       alias hzhj_old_x_for_state_animation x=
  21.       alias hzhj_old_y_for_state_animation y=
  22.       @hzhj_alias_method_for_state_animation = true
  23.     end
  24.     def initialize(*args)
  25.       @hzhj_loop_animations = []
  26.       @hzhj_loop_sprites = {}
  27.       @hzhj_loop_index = {}
  28.       hzhj_old_ini_for_state_animation(*args)
  29.     end
  30.     def animation(animation, hit)
  31.       dispose_animation
  32.       @_animation = animation
  33.       return if @_animation == nil
  34.       @_animation_hit = hit
  35.       @_animation_duration = @_animation.frame_max
  36.       animation_name = @_animation.animation_name
  37.       animation_hue = @_animation.animation_hue
  38.       bitmap = RPG::Cache.animation(animation_name, animation_hue)
  39.       if @@_reference_count.include?(bitmap)
  40.         @@_reference_count[bitmap] += 1
  41.       else
  42.         @@_reference_count[bitmap] = 1
  43.       end
  44.       @_animation_sprites = []
  45.       if @_animation.position != 3 or not @@_animations.include?(animation)
  46.         for i in 0..15
  47.           sprite = ::Sprite.new(self.viewport)
  48.           sprite.bitmap = bitmap
  49.           sprite.visible = false
  50.           sprite.z = self.z + 3000
  51.           sprite.z = self.z + 2000 if animation.name.include?("角色")
  52.           @_animation_sprites.push(sprite)
  53.         end
  54.         unless @@_animations.include?(animation)
  55.           @@_animations.push(animation)
  56.         end
  57.       end
  58.       update_animation
  59.     end

  60.     def loop_animation(animation)
  61.       return if @hzhj_loop_animations.include?(animation)
  62.       if animation.nil?
  63.         dispose_loop_animation
  64.         return
  65.       end
  66.       @hzhj_loop_animations.push(animation)
  67.       @hzhj_loop_index[animation] = 0
  68.       animation_name = animation.animation_name
  69.       animation_hue = animation.animation_hue
  70.       bitmap = RPG::Cache.animation(animation_name, animation_hue)
  71.       if @@_reference_count.include?(bitmap)
  72.         @@_reference_count[bitmap] += 1
  73.       else
  74.         @@_reference_count[bitmap] = 1
  75.       end
  76.       loop_animation_sprites = []
  77.       for i in 0..15
  78.         sprite = ::Sprite.new(self.viewport)
  79.         sprite.bitmap = bitmap
  80.         sprite.z = self.z + 2500
  81.         sprite.visible = false
  82.         loop_animation_sprites.push(sprite)
  83.       end
  84.       @hzhj_loop_sprites[animation] = loop_animation_sprites
  85.       update_loop_animation
  86.     end
  87.     def dispose_loop_animation
  88.       if not @hzhj_loop_animations.empty?
  89.         for sprites in @hzhj_loop_sprites.values
  90.           next if sprites.nil?
  91.           sprite = sprites[0]
  92.           if sprite != nil
  93.             @@_reference_count[sprite.bitmap] -= 1
  94.             if @@_reference_count[sprite.bitmap] == 0
  95.               sprite.bitmap.dispose
  96.             end
  97.           end
  98.           for sprite in sprites
  99.             sprite.dispose
  100.           end
  101.         end
  102.         @hzhj_loop_index.clear
  103.         @hzhj_loop_sprites.clear
  104.         @hzhj_loop_animations.clear
  105.       end
  106.     end
  107.     def update
  108.       hzhj_old_update_for_state_animation
  109.       if not @hzhj_loop_animations.empty? and (Graphics.frame_count % 2 == 0)
  110.         update_loop_animation
  111.         for animation in @hzhj_loop_animations
  112.           @hzhj_loop_index[animation] += 1
  113.           @hzhj_loop_index[animation] %= animation.frame_max
  114.         end
  115.       end
  116.     end
  117.     def update_loop_animation
  118.       if @xiaoshi2 != nil and @xiaoshi2 > 0
  119.         @xiaoshi2 -= 1
  120.         for animation in @hzhj_loop_animations
  121.           frame_index = @hzhj_loop_index[animation]
  122.           cell_data = animation.frames[frame_index].cell_data
  123.           position = animation.position
  124.           sprites = @hzhj_loop_sprites[animation]
  125.           animation_set_sprites(sprites, cell_data, position, true)
  126.         end
  127.       else
  128.         for animation in @hzhj_loop_animations
  129.           frame_index = @hzhj_loop_index[animation]
  130.           cell_data = animation.frames[frame_index].cell_data
  131.           position = animation.position
  132.           sprites = @hzhj_loop_sprites[animation]
  133.           hzhj = animation.name.clone
  134.           animation_set_sprites(sprites, cell_data, position, false, hzhj)
  135.           for timing in animation.timings
  136.             if timing.frame == frame_index
  137.               animation_process_timing(timing, true)
  138.             end
  139.           end
  140.         end
  141.       end
  142.     end
  143.     def x=(new_x)
  144.       sx = new_x - self.x
  145.       if sx != 0
  146.         if not @hzhj_loop_animations.empty?
  147.           for animation in @hzhj_loop_animations
  148.             for i in 0..15
  149.               @hzhj_loop_sprites[animation][i].x += sx
  150.             end
  151.           end
  152.         end
  153.       end
  154.       hzhj_old_x_for_state_animation(new_x)
  155.     end
  156.     def y=(new_y)
  157.       sy = new_y - self.y
  158.       if sy != 0
  159.         if not @hzhj_loop_animations.empty?
  160.           for animation in @hzhj_loop_animations
  161.             for i in 0..15
  162.               @hzhj_loop_sprites[animation][i].y += sy
  163.             end
  164.           end
  165.         end
  166.       end
  167.       hzhj_old_y_for_state_animation(new_y)
  168.     end
  169.     def stop_loop_animation(animation)
  170.       return if not @hzhj_loop_animations.include?(animation)
  171.       if not @battler.nil?
  172.         for i in @battler.states
  173.           next if $data_states[i].nil?
  174.           if $data_states[i].animation_id == animation.id
  175.             return
  176.           end
  177.         end
  178.       end
  179.       sprites = @hzhj_loop_sprites[animation]
  180.       sprite = sprites[0]
  181.       if sprite != nil
  182.         @@_reference_count[sprite.bitmap] -= 1
  183.         if @@_reference_count[sprite.bitmap] == 0
  184.           sprite.bitmap.dispose
  185.         end
  186.       end
  187.       for sprite in sprites
  188.         sprite.dispose
  189.       end
  190.       @hzhj_loop_index[animation] = 0
  191.       @hzhj_loop_sprites[animation] = nil
  192.       @hzhj_loop_animations.delete(animation)
  193.     end
  194.     def animation_set_sprites(sprites, cell_data, position,kds = false, hzhj = nil)
  195.       if kds
  196.         for i in 0..15
  197.           sprites[i].visible = false
  198.         end
  199.         return
  200.       end
  201.       for i in 0..15
  202.         sprite = sprites[i]
  203.         pattern = cell_data[i, 0]
  204.         if sprite == nil or pattern == nil or pattern == -1
  205.           sprite.visible = false if sprite != nil
  206.           next
  207.         end
  208.         sprite.visible = true
  209.         sprite.src_rect.set(pattern % 5 * 192, pattern / 5 * 192, 192, 192)
  210.         if position == 3
  211.           if self.viewport != nil
  212.             sprite.x = self.viewport.rect.width / 2
  213.             sprite.y = self.viewport.rect.height - 160
  214.           else
  215.             sprite.x = 320
  216.             sprite.y = 240
  217.           end
  218.         else
  219.           sprite.x = self.x - self.ox + self.src_rect.width / 2
  220.           sprite.y = self.y - self.oy + self.src_rect.height / 2
  221.           sprite.y -= self.src_rect.height / 4 if position == 0
  222.           sprite.y += self.src_rect.height / 4 if position == 2
  223.         end
  224.         sprite.x += cell_data[i, 1]
  225.         sprite.y += cell_data[i, 2]
  226.         #sprite.z = self.z#2000
  227.         if position == 1 and not hzhj.nil? and hzhj[0, 2] == "ST"
  228.           sprite.z -= 2
  229.         end
  230.         sprite.ox = 96
  231.         sprite.oy = 96
  232.         sprite.zoom_x = cell_data[i, 3] / 100.0
  233.         sprite.zoom_y = cell_data[i, 3] / 100.0
  234.         sprite.angle = cell_data[i, 4]
  235.         sprite.mirror = (cell_data[i, 5] == 1)
  236.         sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
  237.         sprite.blend_type = cell_data[i, 7]
  238.       end
  239.     end
  240.   end
  241. end
  242. #==============================================================================
  243. # ■ Game_Battler
  244. #==============================================================================

  245. class Game_Battler
  246.   if @hzhj_alias_method_for_state_animation.nil?
  247.     alias hzhj_old_ini_gb_state_animation initialize
  248.     alias hzhj_old_add_state add_state
  249.     alias hzhj_old_remove_state remove_state
  250.     @hzhj_alias_method_for_state_animation = true
  251.   end
  252.   #--------------------------------------------------------------------------
  253.   # ● 定义实例变量
  254.   #--------------------------------------------------------------------------
  255.   attr_reader   :hzhj_add_state_id
  256.   attr_reader   :hzhj_remove_state_id
  257.   #--------------------------------------------------------------------------
  258.   # ● 初始化对像
  259.   #--------------------------------------------------------------------------
  260.   def initialize
  261.     @hzhj_add_state_id = []
  262.     @hzhj_remove_state_id = []
  263.     hzhj_old_ini_gb_state_animation
  264.   end
  265.   #--------------------------------------------------------------------------
  266.   # ● 附加状态
  267.   #--------------------------------------------------------------------------
  268.   def add_state(state_id, force = false)
  269.     old_states = @states.clone
  270.     hzhj_old_add_state(state_id, force)
  271.     return if old_states == @states
  272.     zjdzt = (@states | old_states) & @states
  273.     jsdzt = (@states | old_states) & old_states
  274.     for i in zjdzt
  275.       if $data_states[i].animation_id > 0
  276.         if not @hzhj_add_state_id.include?(i)
  277.           @hzhj_add_state_id.push(i)
  278.         end
  279.       end
  280.     end
  281.     for i in jsdzt
  282.       if $data_states[i].animation_id > 0
  283.         if not @hzhj_remove_state_id.include?(i)
  284.           @hzhj_remove_state_id.push(i)
  285.         end
  286.       end
  287.     end
  288.   end
  289.   #--------------------------------------------------------------------------
  290.   # ● 解除状态
  291.   #--------------------------------------------------------------------------
  292.   def remove_state(state_id, force = false)
  293.     old_states = @states.clone
  294.     hzhj_old_remove_state(state_id, force)
  295.     return if old_states == @states
  296.     zjdzt = (@states | old_states) & @states
  297.     jsdzt = (@states | old_states) & old_states
  298.     for i in zjdzt
  299.       if $data_states[i].animation_id > 0
  300.         if not @hzhj_add_state_id.include?(i)
  301.           @hzhj_add_state_id.push(i)
  302.         end
  303.       end
  304.     end
  305.     for i in jsdzt
  306.       if $data_states[i].animation_id > 0
  307.         if not @hzhj_remove_state_id.include?(i)
  308.           @hzhj_remove_state_id.push(i)
  309.         end
  310.       end
  311.     end
  312.   end
  313. end
  314. #==============================================================================
  315. # ■ Sprite_Battler
  316. #==============================================================================

  317. class Sprite_Battler < RPG::Sprite
  318.   if @hzhj_alias_sb_for_state_animation.nil?
  319.     alias hzhj_old_init_sb_for_state_animation initialize
  320.     alias hzhj_old_update_sb_for_state_animation update
  321.     @hzhj_alias_sb_for_state_animation = true
  322.   end
  323.   #--------------------------------------------------------------------------
  324.   # ● 初始化
  325.   #--------------------------------------------------------------------------
  326.   def initialize(*args)
  327.     hzhj_old_init_sb_for_state_animation(*args)
  328.     if not @battler.nil?
  329.       @battler.hzhj_add_state_id.clear
  330.       @battler.hzhj_remove_state_id.clear
  331.       for i in @battler.states
  332.         next if $data_states[i].nil?
  333.         next if $data_states[i].animation_id == 0
  334.         next if $data_animations[$data_states[i].animation_id].nil?
  335.         @battler.hzhj_add_state_id.push(i)
  336.       end
  337.     end
  338.   end
  339.   #--------------------------------------------------------------------------
  340.   # ● 刷新
  341.   #--------------------------------------------------------------------------
  342.   def update
  343.     hzhj_old_update_sb_for_state_animation
  344.     if not @battler.nil?
  345.       if @battler.damage.nil?
  346.         if not @battler.hzhj_add_state_id.empty?
  347.           for i in @battler.hzhj_add_state_id
  348.             if @battler.state?(i)
  349.               animation_id = $data_states[i].animation_id
  350.               animation = $data_animations[animation_id]
  351.               loop_animation(animation) if not animation.nil?
  352.             end
  353.           end
  354.           @battler.hzhj_add_state_id.clear
  355.         end
  356.         if not @battler.hzhj_remove_state_id.empty?
  357.           for i in @battler.hzhj_remove_state_id
  358.             if not @battler.state?(i)
  359.               animation_id = $data_states[i].animation_id
  360.               animation = $data_animations[animation_id]
  361.               stop_loop_animation(animation) if not animation.nil?
  362.             end
  363.           end
  364.           @battler.hzhj_remove_state_id.clear
  365.         end
  366.       end
  367.     end
  368.   end
  369. end
复制代码

作者: 黑米馒头    时间: 2014-7-16 13:05
克莉丝 发表于 2014-7-16 12:51
把原来我发给你的脚本删掉换上这个脚本.还没有测试多状态的效果请自行测试并反馈结果 ...

能否让动画库前面有显示"ST"的动画,的Z坐标比角色的Z坐标低
作者: 克莉丝    时间: 2014-7-16 13:08
黑米馒头 发表于 2014-7-16 13:05
能否让动画库前面有显示"ST"的动画,的Z坐标比角色的Z坐标低

ST即状态动画,显示时如果在角色下面不是违背你起先的意图了么
作者: 黑米馒头    时间: 2014-7-16 13:13
克莉丝 发表于 2014-7-16 12:51
把原来我发给你的脚本删掉换上这个脚本.还没有测试多状态的效果请自行测试并反馈结果 ...

因为是显示多个状态动画的脚本,所以我想弄2种状态动画的Z坐标,1种是显示在角色战斗图上面的,还1种是显示角色战斗图下面的。
作者: 克莉丝    时间: 2014-7-16 13:16
尼玛这页面变好长

按照你说的嗯.覆盖之前的一个脚本即可
  1. #使用方法
  2. #在状态库和动画库的名称开头,加上ST,便使该ID动画Z坐标下降
  3. #======================================================================
  4. # 脚本来自www.66rpg.com,使用或转载请保留此信息
  5. # 功能:多状态动画同时显示
  6. # 版本:2.01
  7. # 作者:后知后觉 2011-3-2
  8. # 使用方法:插入Main前即可
  9. # 冲突可能:只要在你的脚本编辑器内没有对 RPG::Sprite 或 Sprite_Battler 类
  10. #           以下三个方法做出过别的定义 则就有较大的兼容性
  11. #           loop_animation
  12. #           dispose_loop_animation
  13. #           update_loop_animation
  14. #======================================================================

  15. module RPG
  16.   class Sprite < ::Sprite
  17.     if @hzhj_alias_method_for_state_animation.nil?
  18.       alias hzhj_old_ini_for_state_animation initialize
  19.       alias hzhj_old_update_for_state_animation update
  20.       alias hzhj_old_x_for_state_animation x=
  21.       alias hzhj_old_y_for_state_animation y=
  22.       @hzhj_alias_method_for_state_animation = true
  23.     end
  24.     def initialize(*args)
  25.       @hzhj_loop_animations = []
  26.       @hzhj_loop_sprites = {}
  27.       @hzhj_loop_index = {}
  28.       hzhj_old_ini_for_state_animation(*args)
  29.     end
  30.     def animation(animation, hit)
  31.       dispose_animation
  32.       @_animation = animation
  33.       return if @_animation == nil
  34.       @_animation_hit = hit
  35.       @_animation_duration = @_animation.frame_max
  36.       animation_name = @_animation.animation_name
  37.       animation_hue = @_animation.animation_hue
  38.       bitmap = RPG::Cache.animation(animation_name, animation_hue)
  39.       if @@_reference_count.include?(bitmap)
  40.         @@_reference_count[bitmap] += 1
  41.       else
  42.         @@_reference_count[bitmap] = 1
  43.       end
  44.       @_animation_sprites = []
  45.       if @_animation.position != 3 or not @@_animations.include?(animation)
  46.         for i in 0..15
  47.           sprite = ::Sprite.new(self.viewport)
  48.           sprite.bitmap = bitmap
  49.           sprite.visible = false
  50.           sprite.z = self.z + 3000
  51.           sprite.z = self.z + 2000 if animation.name.include?("角色")
  52.           @_animation_sprites.push(sprite)
  53.         end
  54.         unless @@_animations.include?(animation)
  55.           @@_animations.push(animation)
  56.         end
  57.       end
  58.       update_animation
  59.     end

  60.     def loop_animation(animation)
  61.       return if @hzhj_loop_animations.include?(animation)
  62.       if animation.nil?
  63.         dispose_loop_animation
  64.         return
  65.       end
  66.       @hzhj_loop_animations.push(animation)
  67.       @hzhj_loop_index[animation] = 0
  68.       animation_name = animation.animation_name
  69.       animation_hue = animation.animation_hue
  70.       bitmap = RPG::Cache.animation(animation_name, animation_hue)
  71.       if @@_reference_count.include?(bitmap)
  72.         @@_reference_count[bitmap] += 1
  73.       else
  74.         @@_reference_count[bitmap] = 1
  75.       end
  76.       loop_animation_sprites = []
  77.       for i in 0..15
  78.         sprite = ::Sprite.new(self.viewport)
  79.         sprite.bitmap = bitmap
  80.         sprite.z = self.z + 2500
  81.         sprite.z = self.z - 1000 if animation.name.include?("ST")
  82.         sprite.visible = false
  83.         loop_animation_sprites.push(sprite)
  84.       end
  85.       @hzhj_loop_sprites[animation] = loop_animation_sprites
  86.       update_loop_animation
  87.     end
  88.     def dispose_loop_animation
  89.       if not @hzhj_loop_animations.empty?
  90.         for sprites in @hzhj_loop_sprites.values
  91.           next if sprites.nil?
  92.           sprite = sprites[0]
  93.           if sprite != nil
  94.             @@_reference_count[sprite.bitmap] -= 1
  95.             if @@_reference_count[sprite.bitmap] == 0
  96.               sprite.bitmap.dispose
  97.             end
  98.           end
  99.           for sprite in sprites
  100.             sprite.dispose
  101.           end
  102.         end
  103.         @hzhj_loop_index.clear
  104.         @hzhj_loop_sprites.clear
  105.         @hzhj_loop_animations.clear
  106.       end
  107.     end
  108.     def update
  109.       hzhj_old_update_for_state_animation
  110.       if not @hzhj_loop_animations.empty? and (Graphics.frame_count % 2 == 0)
  111.         update_loop_animation
  112.         for animation in @hzhj_loop_animations
  113.           @hzhj_loop_index[animation] += 1
  114.           @hzhj_loop_index[animation] %= animation.frame_max
  115.         end
  116.       end
  117.     end
  118.     def update_loop_animation
  119.       if @xiaoshi2 != nil and @xiaoshi2 > 0
  120.         @xiaoshi2 -= 1
  121.         for animation in @hzhj_loop_animations
  122.           frame_index = @hzhj_loop_index[animation]
  123.           cell_data = animation.frames[frame_index].cell_data
  124.           position = animation.position
  125.           sprites = @hzhj_loop_sprites[animation]
  126.           animation_set_sprites(sprites, cell_data, position, true)
  127.         end
  128.       else
  129.         for animation in @hzhj_loop_animations
  130.           frame_index = @hzhj_loop_index[animation]
  131.           cell_data = animation.frames[frame_index].cell_data
  132.           position = animation.position
  133.           sprites = @hzhj_loop_sprites[animation]
  134.           hzhj = animation.name.clone
  135.           animation_set_sprites(sprites, cell_data, position, false, hzhj)
  136.           for timing in animation.timings
  137.             if timing.frame == frame_index
  138.               animation_process_timing(timing, true)
  139.             end
  140.           end
  141.         end
  142.       end
  143.     end
  144.     def x=(new_x)
  145.       sx = new_x - self.x
  146.       if sx != 0
  147.         if not @hzhj_loop_animations.empty?
  148.           for animation in @hzhj_loop_animations
  149.             for i in 0..15
  150.               @hzhj_loop_sprites[animation][i].x += sx
  151.             end
  152.           end
  153.         end
  154.       end
  155.       hzhj_old_x_for_state_animation(new_x)
  156.     end
  157.     def y=(new_y)
  158.       sy = new_y - self.y
  159.       if sy != 0
  160.         if not @hzhj_loop_animations.empty?
  161.           for animation in @hzhj_loop_animations
  162.             for i in 0..15
  163.               @hzhj_loop_sprites[animation][i].y += sy
  164.             end
  165.           end
  166.         end
  167.       end
  168.       hzhj_old_y_for_state_animation(new_y)
  169.     end
  170.     def stop_loop_animation(animation)
  171.       return if not @hzhj_loop_animations.include?(animation)
  172.       if not @battler.nil?
  173.         for i in @battler.states
  174.           next if $data_states[i].nil?
  175.           if $data_states[i].animation_id == animation.id
  176.             return
  177.           end
  178.         end
  179.       end
  180.       sprites = @hzhj_loop_sprites[animation]
  181.       sprite = sprites[0]
  182.       if sprite != nil
  183.         @@_reference_count[sprite.bitmap] -= 1
  184.         if @@_reference_count[sprite.bitmap] == 0
  185.           sprite.bitmap.dispose
  186.         end
  187.       end
  188.       for sprite in sprites
  189.         sprite.dispose
  190.       end
  191.       @hzhj_loop_index[animation] = 0
  192.       @hzhj_loop_sprites[animation] = nil
  193.       @hzhj_loop_animations.delete(animation)
  194.     end
  195.     def animation_set_sprites(sprites, cell_data, position,kds = false, hzhj = nil)
  196.       if kds
  197.         for i in 0..15
  198.           sprites[i].visible = false
  199.         end
  200.         return
  201.       end
  202.       for i in 0..15
  203.         sprite = sprites[i]
  204.         pattern = cell_data[i, 0]
  205.         if sprite == nil or pattern == nil or pattern == -1
  206.           sprite.visible = false if sprite != nil
  207.           next
  208.         end
  209.         sprite.visible = true
  210.         sprite.src_rect.set(pattern % 5 * 192, pattern / 5 * 192, 192, 192)
  211.         if position == 3
  212.           if self.viewport != nil
  213.             sprite.x = self.viewport.rect.width / 2
  214.             sprite.y = self.viewport.rect.height - 160
  215.           else
  216.             sprite.x = 320
  217.             sprite.y = 240
  218.           end
  219.         else
  220.           sprite.x = self.x - self.ox + self.src_rect.width / 2
  221.           sprite.y = self.y - self.oy + self.src_rect.height / 2
  222.           sprite.y -= self.src_rect.height / 4 if position == 0
  223.           sprite.y += self.src_rect.height / 4 if position == 2
  224.         end
  225.         sprite.x += cell_data[i, 1]
  226.         sprite.y += cell_data[i, 2]
  227.         #sprite.z = self.z#2000
  228.         if position == 1 and not hzhj.nil? and hzhj[0, 2] == "ST"
  229.           sprite.z -= 2
  230.         end
  231.         sprite.ox = 96
  232.         sprite.oy = 96
  233.         sprite.zoom_x = cell_data[i, 3] / 100.0
  234.         sprite.zoom_y = cell_data[i, 3] / 100.0
  235.         sprite.angle = cell_data[i, 4]
  236.         sprite.mirror = (cell_data[i, 5] == 1)
  237.         sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
  238.         sprite.blend_type = cell_data[i, 7]
  239.       end
  240.     end
  241.   end
  242. end
  243. #==============================================================================
  244. # ■ Game_Battler
  245. #==============================================================================

  246. class Game_Battler
  247.   if @hzhj_alias_method_for_state_animation.nil?
  248.     alias hzhj_old_ini_gb_state_animation initialize
  249.     alias hzhj_old_add_state add_state
  250.     alias hzhj_old_remove_state remove_state
  251.     @hzhj_alias_method_for_state_animation = true
  252.   end
  253.   #--------------------------------------------------------------------------
  254.   # ● 定义实例变量
  255.   #--------------------------------------------------------------------------
  256.   attr_reader   :hzhj_add_state_id
  257.   attr_reader   :hzhj_remove_state_id
  258.   #--------------------------------------------------------------------------
  259.   # ● 初始化对像
  260.   #--------------------------------------------------------------------------
  261.   def initialize
  262.     @hzhj_add_state_id = []
  263.     @hzhj_remove_state_id = []
  264.     hzhj_old_ini_gb_state_animation
  265.   end
  266.   #--------------------------------------------------------------------------
  267.   # ● 附加状态
  268.   #--------------------------------------------------------------------------
  269.   def add_state(state_id, force = false)
  270.     old_states = @states.clone
  271.     hzhj_old_add_state(state_id, force)
  272.     return if old_states == @states
  273.     zjdzt = (@states | old_states) & @states
  274.     jsdzt = (@states | old_states) & old_states
  275.     for i in zjdzt
  276.       if $data_states[i].animation_id > 0
  277.         if not @hzhj_add_state_id.include?(i)
  278.           @hzhj_add_state_id.push(i)
  279.         end
  280.       end
  281.     end
  282.     for i in jsdzt
  283.       if $data_states[i].animation_id > 0
  284.         if not @hzhj_remove_state_id.include?(i)
  285.           @hzhj_remove_state_id.push(i)
  286.         end
  287.       end
  288.     end
  289.   end
  290.   #--------------------------------------------------------------------------
  291.   # ● 解除状态
  292.   #--------------------------------------------------------------------------
  293.   def remove_state(state_id, force = false)
  294.     old_states = @states.clone
  295.     hzhj_old_remove_state(state_id, force)
  296.     return if old_states == @states
  297.     zjdzt = (@states | old_states) & @states
  298.     jsdzt = (@states | old_states) & old_states
  299.     for i in zjdzt
  300.       if $data_states[i].animation_id > 0
  301.         if not @hzhj_add_state_id.include?(i)
  302.           @hzhj_add_state_id.push(i)
  303.         end
  304.       end
  305.     end
  306.     for i in jsdzt
  307.       if $data_states[i].animation_id > 0
  308.         if not @hzhj_remove_state_id.include?(i)
  309.           @hzhj_remove_state_id.push(i)
  310.         end
  311.       end
  312.     end
  313.   end
  314. end
  315. #==============================================================================
  316. # ■ Sprite_Battler
  317. #==============================================================================

  318. class Sprite_Battler < RPG::Sprite
  319.   if @hzhj_alias_sb_for_state_animation.nil?
  320.     alias hzhj_old_init_sb_for_state_animation initialize
  321.     alias hzhj_old_update_sb_for_state_animation update
  322.     @hzhj_alias_sb_for_state_animation = true
  323.   end
  324.   #--------------------------------------------------------------------------
  325.   # ● 初始化
  326.   #--------------------------------------------------------------------------
  327.   def initialize(*args)
  328.     hzhj_old_init_sb_for_state_animation(*args)
  329.     if not @battler.nil?
  330.       @battler.hzhj_add_state_id.clear
  331.       @battler.hzhj_remove_state_id.clear
  332.       for i in @battler.states
  333.         next if $data_states[i].nil?
  334.         next if $data_states[i].animation_id == 0
  335.         next if $data_animations[$data_states[i].animation_id].nil?
  336.         @battler.hzhj_add_state_id.push(i)
  337.       end
  338.     end
  339.   end
  340.   #--------------------------------------------------------------------------
  341.   # ● 刷新
  342.   #--------------------------------------------------------------------------
  343.   def update
  344.     hzhj_old_update_sb_for_state_animation
  345.     if not @battler.nil?
  346.       if @battler.damage.nil?
  347.         if not @battler.hzhj_add_state_id.empty?
  348.           for i in @battler.hzhj_add_state_id
  349.             if @battler.state?(i)
  350.               animation_id = $data_states[i].animation_id
  351.               animation = $data_animations[animation_id]
  352.               loop_animation(animation) if not animation.nil?
  353.             end
  354.           end
  355.           @battler.hzhj_add_state_id.clear
  356.         end
  357.         if not @battler.hzhj_remove_state_id.empty?
  358.           for i in @battler.hzhj_remove_state_id
  359.             if not @battler.state?(i)
  360.               animation_id = $data_states[i].animation_id
  361.               animation = $data_animations[animation_id]
  362.               stop_loop_animation(animation) if not animation.nil?
  363.             end
  364.           end
  365.           @battler.hzhj_remove_state_id.clear
  366.         end
  367.       end
  368.     end
  369.   end
  370. end
复制代码

作者: 黑米馒头    时间: 2014-7-16 13:50
好了,问题全部解决了,太谢谢了!
作者: 黑米馒头    时间: 2014-7-18 14:57
克莉丝 发表于 2014-7-16 13:16
尼玛这页面变好长

按照你说的嗯.覆盖之前的一个脚本即可

貌似我在调坐标Z值的时候发现了个问题,
因为我游戏里用了很多脚本Z坐标都是设置的   self.z = @battler.screen_y + 119  ,所以我在这个状态脚本里也把z坐标改成
self.z = @battler.screen_y + 119    。问题是前面2个设定里面改成这样都没效果一样,虽然战斗图显示在状态动画下面了,角色攻击的时候也正常,可是角色移动的时候,状态动画会显示在角色的下方。
设定1:
51.          sprite.z = self.z + 3000
52.          sprite.z = self.z + 2000 if animation.name.include?("角色")
设定2:
82.        sprite.z = self.z + 2500
83.        sprite.z = self.z - 1000 if animation.name.include?("ST")


然后试调了很多次,发现把

229.        #sprite.z = self.z#2000
230.        if position == 1 and not hzhj.nil? and hzhj[0, 2] == "ST"
231.          sprite.z -= 2
232.       end

这里改成
self.z = @battler.screen_y + 119  
sprite.z = self.z
if position == 1 and not hzhj.nil? and hzhj[0, 2] == "ST"
sprite.z -= 2   
end

这样,角色移动的时候状态动画就不会显示在战斗图下方了,问题是攻击的时候状态图又显示到攻击动画的下方了,就是说这样改了之后,上面的2个设定好像作废了一样。 这是怎么回事。有办法修改吗









欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1