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

Project1

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

[已经过期] 动画脚本Z坐标

[复制链接]

Lv3.寻梦者

梦石
0
星屑
3526
在线时间
1887 小时
注册时间
2010-6-19
帖子
1210
跳转到指定楼层
1
发表于 2014-7-21 13:27:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
下面这个状态脚本
我在第219-220行添加了
     self.z = @battler.screen_y + 119
        sprite.z = self.z
导致敌38-40行的这段脚本没效果了
      self.z = @battler.screen_y -  119
          sprite.z = self.z
          sprite.z = self.z   if animation.name.include?("敌")
在不使219-220这行脚本失效的情况下,如何使用38-40这段脚本有效果,有会的高手抽空帮忙看下。。感激不尽。
  1. module RPG
  2.   class Sprite < ::Sprite
  3.     if @hzhj_alias_method_for_state_animation.nil?
  4.       alias hzhj_old_ini_for_state_animation initialize
  5.       alias hzhj_old_update_for_state_animation update
  6.       alias hzhj_old_x_for_state_animation x=
  7.       alias hzhj_old_y_for_state_animation y=
  8.       @hzhj_alias_method_for_state_animation = true
  9.     end
  10.     def initialize(*args)
  11.       @hzhj_loop_animations = []
  12.       @hzhj_loop_sprites = {}
  13.       @hzhj_loop_index = {}
  14.       hzhj_old_ini_for_state_animation(*args)
  15.     end
  16.     def animation(animation, hit)
  17.       dispose_animation
  18.       @_animation = animation
  19.       return if @_animation == nil
  20.       @_animation_hit = hit
  21.       @_animation_duration = @_animation.frame_max
  22.       animation_name = @_animation.animation_name
  23.       animation_hue = @_animation.animation_hue
  24.       bitmap = RPG::Cache.animation(animation_name, animation_hue)
  25.       if @@_reference_count.include?(bitmap)
  26.         @@_reference_count[bitmap] += 1
  27.       else
  28.         @@_reference_count[bitmap] = 1
  29.       end
  30.       @_animation_sprites = []
  31.       if @_animation.position != 3 or not @@_animations.include?(animation)
  32.         for i in 0..15
  33.           sprite = ::Sprite.new(self.viewport)
  34.           sprite.bitmap = bitmap
  35.           sprite.visible = false
  36.          
  37. #================================================================           
  38.           self.z = @battler.screen_y -  119
  39.           sprite.z = self.z
  40.           sprite.z = self.z   if animation.name.include?("敌")
  41. #================================================================           
  42.          
  43.           @_animation_sprites.push(sprite)
  44.         end
  45.         unless @@_animations.include?(animation)
  46.           @@_animations.push(animation)
  47.         end
  48.       end
  49.       update_animation
  50.     end

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

  216. #====================================================        
  217.         self.z = @battler.screen_y + 119
  218.         sprite.z = self.z
  219. #====================================================        
  220.         
  221.         if position == 1 and not hzhj.nil? and hzhj[0, 2] == "ST"
  222.           sprite.z = 2
  223.         end
  224.         sprite.ox = 96
  225.         sprite.oy = 96
  226.         sprite.zoom_x = cell_data[i, 3] / 100.0
  227.         sprite.zoom_y = cell_data[i, 3] / 100.0
  228.         sprite.angle = cell_data[i, 4]
  229.         sprite.mirror = (cell_data[i, 5] == 1)
  230.         sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
  231.         sprite.blend_type = cell_data[i, 7]
  232.       end
  233.     end
  234.   end
  235. end
  236. #==============================================================================
  237. # ■ Game_Battler
  238. #==============================================================================

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

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

Lv1.梦旅人

神之首

梦石
0
星屑
65
在线时间
200 小时
注册时间
2011-2-7
帖子
220
2
发表于 2014-7-22 16:29:14 | 只看该作者
这脚本什么用的?请说明

点评

这好像是帮助里游戏库内部类的脚本  发表于 2014-7-22 16:34
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1743
在线时间
485 小时
注册时间
2006-1-7
帖子
1073
3
发表于 2014-7-22 16:51:41 | 只看该作者
因为你重新定义了一个数据,也就是  sprite.z  这个值
所以,一切计算结果按照后定义的那个来计算
如果你要保留先前的效果,那么你要搞清楚先前的效果是在什么情况下的
然后再给其中一个加上条件。
那么,除了这个条件的情况下,以外都是按照另外一个算法计算

说简单点:
满足条件1的情况下,按照公式1计算
其它情况,按照计算公式2计算
初从文,三年不中;后习武,校场发一矢,中鼓吏,逐之出;遂学医,有所成。自撰一良方,服之,卒。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-9-22 12:45

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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