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

Project1

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

[已经解决] 动画的Z坐标问题

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
107 小时
注册时间
2010-10-10
帖子
228
跳转到指定楼层
1
发表于 2011-9-12 15:51:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 梦到叶子了 于 2011-9-12 15:52 编辑

主要如何 让动画库里的 部分动画ID的Z坐标进行调整

比如我有一个状态里的动画,需要在角色的脚底下,但是不用修改全局的动画Z坐标,只是部分的。

我以前见过 在数据库的动画里  名字后缀加上 ,XXX
XX是数字
是Z坐标的数字
就可也实现动画 在战斗图上方 还是下方
决定于 ,XX的数值大小


我是新手党,但是请不要小看任何一个新手,新手们的力量,是不容忽略的!

Lv1.梦旅人

神仙

梦石
0
星屑
69
在线时间
596 小时
注册时间
2007-5-14
帖子
1289
2
发表于 2011-9-13 00:04:07 | 只看该作者
在状态库和动画库的名称开头,加上ST,便使该ID动画Z坐标下降
  1. #======================================================================
  2. # 脚本来自www.66rpg.com,使用或转载请保留此信息
  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. module RPG
  14.   class Sprite < ::Sprite
  15.     if @hzhj_alias_method_for_state_animation.nil?
  16.       alias hzhj_old_ini_for_state_animation initialize
  17.       alias hzhj_old_update_for_state_animation update
  18.       alias hzhj_old_x_for_state_animation x=
  19.       alias hzhj_old_y_for_state_animation y=
  20.       @hzhj_alias_method_for_state_animation = true
  21.     end
  22.     def initialize(*args)
  23.       @hzhj_loop_animations = []
  24.       @hzhj_loop_sprites = {}
  25.       @hzhj_loop_index = {}
  26.       hzhj_old_ini_for_state_animation(*args)
  27.     end
  28.     def loop_animation(animation)
  29.       return if @hzhj_loop_animations.include?(animation)
  30.       if animation.nil?
  31.         dispose_loop_animation
  32.         return
  33.       end
  34.       @hzhj_loop_animations.push(animation)
  35.       @hzhj_loop_index[animation] = 0
  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.       loop_animation_sprites = []
  45.       for i in 0..15
  46.         sprite = ::Sprite.new(self.viewport)
  47.         sprite.bitmap = bitmap
  48.         sprite.visible = false
  49.         loop_animation_sprites.push(sprite)
  50.       end
  51.       @hzhj_loop_sprites[animation] = loop_animation_sprites
  52.       update_loop_animation
  53.     end
  54.     def dispose_loop_animation
  55.       if not @hzhj_loop_animations.empty?
  56.         for sprites in @hzhj_loop_sprites.values
  57.           next if sprites.nil?
  58.           sprite = sprites[0]
  59.           if sprite != nil
  60.             @@_reference_count[sprite.bitmap] -= 1
  61.             if @@_reference_count[sprite.bitmap] == 0
  62.               sprite.bitmap.dispose
  63.             end
  64.           end
  65.           for sprite in sprites
  66.             sprite.dispose
  67.           end
  68.         end
  69.         @hzhj_loop_index.clear
  70.         @hzhj_loop_sprites.clear
  71.         @hzhj_loop_animations.clear
  72.       end
  73.     end
  74.     def update
  75.       hzhj_old_update_for_state_animation
  76.       if not @hzhj_loop_animations.empty? and (Graphics.frame_count % 2 == 0)
  77.         update_loop_animation
  78.         for animation in @hzhj_loop_animations
  79.           @hzhj_loop_index[animation] += 1
  80.           @hzhj_loop_index[animation] %= animation.frame_max
  81.         end
  82.       end
  83.     end
  84.     def update_loop_animation
  85.       if @xiaoshi2 != nil and @xiaoshi2 > 0
  86.         @xiaoshi2 -= 1
  87.         for animation in @hzhj_loop_animations
  88.           frame_index = @hzhj_loop_index[animation]
  89.           cell_data = animation.frames[frame_index].cell_data
  90.           position = animation.position
  91.           sprites = @hzhj_loop_sprites[animation]
  92.           animation_set_sprites(sprites, cell_data, position, true)
  93.         end
  94.       else
  95.         for animation in @hzhj_loop_animations
  96.           frame_index = @hzhj_loop_index[animation]
  97.           cell_data = animation.frames[frame_index].cell_data
  98.           position = animation.position
  99.           sprites = @hzhj_loop_sprites[animation]
  100.           hzhj = animation.name.clone
  101.           animation_set_sprites(sprites, cell_data, position, false, hzhj)
  102.           for timing in animation.timings
  103.             if timing.frame == frame_index
  104.               animation_process_timing(timing, true)
  105.             end
  106.           end
  107.         end
  108.       end
  109.     end
  110.     def x=(new_x)
  111.       sx = new_x - self.x
  112.       if sx != 0
  113.         if not @hzhj_loop_animations.empty?
  114.           for animation in @hzhj_loop_animations
  115.             for i in 0..15
  116.               @hzhj_loop_sprites[animation][i].x += sx
  117.             end
  118.           end
  119.         end
  120.       end
  121.       hzhj_old_x_for_state_animation(new_x)
  122.     end
  123.     def y=(new_y)
  124.       sy = new_y - self.y
  125.       if sy != 0
  126.         if not @hzhj_loop_animations.empty?
  127.           for animation in @hzhj_loop_animations
  128.             for i in 0..15
  129.               @hzhj_loop_sprites[animation][i].y += sy
  130.             end
  131.           end
  132.         end
  133.       end
  134.       hzhj_old_y_for_state_animation(new_y)
  135.     end
  136.     def stop_loop_animation(animation)
  137.       return if not @hzhj_loop_animations.include?(animation)
  138.       if not @battler.nil?
  139.         for i in @battler.states
  140.           next if $data_states[i].nil?
  141.           if $data_states[i].animation_id == animation.id
  142.             return
  143.           end
  144.         end
  145.       end
  146.       sprites = @hzhj_loop_sprites[animation]
  147.       sprite = sprites[0]
  148.       if sprite != nil
  149.         @@_reference_count[sprite.bitmap] -= 1
  150.         if @@_reference_count[sprite.bitmap] == 0
  151.           sprite.bitmap.dispose
  152.         end
  153.       end
  154.       for sprite in sprites
  155.         sprite.dispose
  156.       end
  157.       @hzhj_loop_index[animation] = 0
  158.       @hzhj_loop_sprites[animation] = nil
  159.       @hzhj_loop_animations.delete(animation)
  160.     end
  161.     def animation_set_sprites(sprites, cell_data, position,kds = false, hzhj = nil)
  162.       if kds
  163.         for i in 0..15
  164.           sprites[i].visible = false
  165.         end
  166.         return
  167.       end
  168.       for i in 0..15
  169.         sprite = sprites[i]
  170.         pattern = cell_data[i, 0]
  171.         if sprite == nil or pattern == nil or pattern == -1
  172.           sprite.visible = false if sprite != nil
  173.           next
  174.         end
  175.         sprite.visible = true
  176.         sprite.src_rect.set(pattern % 5 * 192, pattern / 5 * 192, 192, 192)
  177.         if position == 3
  178.           if self.viewport != nil
  179.             sprite.x = self.viewport.rect.width / 2
  180.             sprite.y = self.viewport.rect.height - 160
  181.           else
  182.             sprite.x = 320
  183.             sprite.y = 240
  184.           end
  185.         else
  186.           sprite.x = self.x - self.ox + self.src_rect.width / 2
  187.           sprite.y = self.y - self.oy + self.src_rect.height / 2
  188.           sprite.y -= self.src_rect.height / 4 if position == 0
  189.           sprite.y += self.src_rect.height / 4 if position == 2
  190.         end
  191.         sprite.x += cell_data[i, 1]
  192.         sprite.y += cell_data[i, 2]
  193.         sprite.z = self.z#2000
  194.         if position == 1 and not hzhj.nil? and hzhj[0, 2] == "ST"
  195.           sprite.z -= 2
  196.         end
  197.         sprite.ox = 96
  198.         sprite.oy = 96
  199.         sprite.zoom_x = cell_data[i, 3] / 100.0
  200.         sprite.zoom_y = cell_data[i, 3] / 100.0
  201.         sprite.angle = cell_data[i, 4]
  202.         sprite.mirror = (cell_data[i, 5] == 1)
  203.         sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
  204.         sprite.blend_type = cell_data[i, 7]
  205.       end
  206.     end
  207.   end
  208. end
  209. #==============================================================================
  210. # ■ Game_Battler
  211. #==============================================================================

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

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

  337. #======================================================================
  338. # 脚本来自 www.66rpg.com 使用或转载请保留此信息
  339. # 功能:多状态动画同时显示
  340. # 版本:2.01
  341. # 作者:后知后觉 2011-3-2
  342. # 使用方法:插入Main前即可
  343. #======================================================================.2011-03-09
复制代码
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-26 22:24

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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