| 
 
| 赞 | 5 |  
| VIP | 0 |  
| 好人卡 | 2 |  
| 积分 | 37 |  
| 经验 | 24079 |  
| 最后登录 | 2025-10-30 |  
| 在线时间 | 1891 小时 |  
 Lv3.寻梦者 
	梦石0 星屑3671 在线时间1891 小时注册时间2010-6-19帖子1208 | 
| 本帖最后由 黑米馒头 于 2011-4-4 19:17 编辑 
 大虾们帮忙整合下下面2个脚本。这2个脚本单个放游戏里没问题,不过2个一起放进去就会出现脚本问题.。
 
 问题如下:
 战斗的时候用法术,角色会附带状态动画,用了2个法术之后就出现脚本问题了。或者用了2个法术之后攻击敌人也会出现一样的脚本问题。
 
 
 范例
 
  范例.rar
(4.67 MB, 下载次数: 52) 
 
 
 脚本1:
 module RPG
 class Sprite < ::Sprite
 def animation_set_sprites(sprites, cell_data, position)
 case @_animation.id.to_i
 when 1,2..999
 z = 0
 else
 z = 2000
 end
 for i in 0..15
 sprite = sprites
 pattern = cell_data[i, 0]
 if sprite == nil or pattern == nil or pattern == -1
 sprite.visible = false if sprite != nil
 next
 end
 sprite.visible = true
 sprite.src_rect.set(pattern % 5 * 192, pattern / 5 * 192, 192, 192)
 if position == 3
 if self.viewport != nil
 sprite.x = self.viewport.rect.width / 2
 sprite.y = self.viewport.rect.height - 160
 else
 sprite.x = 320
 sprite.y = 240
 end
 else
 sprite.x = self.x - self.ox + self.src_rect.width / 2
 sprite.y = self.y - self.oy + self.src_rect.height / 2
 sprite.y -= self.src_rect.height / 4 if position == 0
 sprite.y += self.src_rect.height / 4 if position == 2
 end
 sprite.x += cell_data[i, 1]
 sprite.y += cell_data[i, 2]
 sprite.z = z
 sprite.ox = 96
 sprite.oy = 96
 sprite.zoom_x = cell_data[i, 3] / 100.0
 sprite.zoom_y = cell_data[i, 3] / 100.0
 sprite.angle = cell_data[i, 4]
 sprite.mirror = (cell_data[i, 5] == 1)
 sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
 sprite.blend_type = cell_data[i, 7]
 end
 end
 end
 end
 
 
 脚本2:
 module RPG
 class Sprite < ::Sprite
 if @hzhj_alias_method_for_state_animation.nil?
 alias hzhj_old_ini_for_state_animation initialize
 alias hzhj_old_update_for_state_animation update
 alias hzhj_old_x_for_state_animation x=
 alias hzhj_old_y_for_state_animation y=
 @hzhj_alias_method_for_state_animation = true
 end
 def initialize(*args)
 @hzhj_loop_animations = []
 @hzhj_loop_sprites = {}
 @hzhj_loop_index = {}
 hzhj_old_ini_for_state_animation(*args)
 end
 def loop_animation(animation)
 return if @hzhj_loop_animations.include?(animation)
 if animation.nil?
 dispose_loop_animation
 return
 end
 @hzhj_loop_animations.push(animation)
 @hzhj_loop_index[animation] = 0
 animation_name = animation.animation_name
 animation_hue = animation.animation_hue
 bitmap = RPG::Cache.animation(animation_name, animation_hue)
 if @@_reference_count.include?(bitmap)
 @@_reference_count[bitmap] += 1
 else
 @@_reference_count[bitmap] = 1
 end
 loop_animation_sprites = []
 for i in 0..15
 sprite = ::Sprite.new(self.viewport)
 sprite.bitmap = bitmap
 sprite.visible = false
 loop_animation_sprites.push(sprite)
 end
 @hzhj_loop_sprites[animation] = loop_animation_sprites
 update_loop_animation
 end
 def dispose_loop_animation
 if not @hzhj_loop_animations.empty?
 for sprites in @hzhj_loop_sprites.values
 next if sprites.nil?
 sprite = sprites[0]
 if sprite != nil
 @@_reference_count[sprite.bitmap] -= 1
 if @@_reference_count[sprite.bitmap] == 0
 sprite.bitmap.dispose
 end
 end
 for sprite in sprites
 sprite.dispose
 end
 end
 @hzhj_loop_index.clear
 @hzhj_loop_sprites.clear
 @hzhj_loop_animations.clear
 end
 end
 def update
 hzhj_old_update_for_state_animation
 if not @hzhj_loop_animations.empty? and (Graphics.frame_count % 2 == 0)
 update_loop_animation
 for animation in @hzhj_loop_animations
 @hzhj_loop_index[animation] += 1
 @hzhj_loop_index[animation] %= animation.frame_max
 end
 end
 end
 def update_loop_animation
 if @xiaoshi2 != nil and @xiaoshi2 > 0
 @xiaoshi2 -= 1
 for animation in @hzhj_loop_animations
 frame_index = @hzhj_loop_index[animation]
 cell_data = animation.frames[frame_index].cell_data
 position = animation.position
 sprites = @hzhj_loop_sprites[animation]
 animation_set_sprites(sprites, cell_data, position, true)
 end
 else
 for animation in @hzhj_loop_animations
 frame_index = @hzhj_loop_index[animation]
 cell_data = animation.frames[frame_index].cell_data
 position = animation.position
 sprites = @hzhj_loop_sprites[animation]
 animation_set_sprites(sprites, cell_data, position)
 for timing in animation.timings
 if timing.frame == frame_index
 animation_process_timing(timing, true)
 end
 end
 end
 end
 end
 def x=(new_x)
 sx = new_x - self.x
 if sx != 0
 if not @hzhj_loop_animations.empty?
 for animation in @hzhj_loop_animations
 for i in 0..15
 @hzhj_loop_sprites[animation].x += sx
 end
 end
 end
 end
 hzhj_old_x_for_state_animation(new_x)
 end
 def y=(new_y)
 sy = new_y - self.y
 if sy != 0
 if not @hzhj_loop_animations.empty?
 for animation in @hzhj_loop_animations
 for i in 0..15
 @hzhj_loop_sprites[animation].y += sy
 end
 end
 end
 end
 hzhj_old_y_for_state_animation(new_y)
 end
 def stop_loop_animation(animation)
 return if not @hzhj_loop_animations.include?(animation)
 if not @battler.nil?
 for i in @battler.states
 next if $data_states.nil?
 if $data_states.animation_id == animation.id
 return
 end
 end
 end
 sprites = @hzhj_loop_sprites[animation]
 sprite = sprites[0]
 if sprite != nil
 @@_reference_count[sprite.bitmap] -= 1
 if @@_reference_count[sprite.bitmap] == 0
 sprite.bitmap.dispose
 end
 end
 for sprite in sprites
 sprite.dispose
 end
 @hzhj_loop_index[animation] = 0
 @hzhj_loop_sprites[animation] = nil
 @hzhj_loop_animations.delete(animation)
 end
 end
 end
 #==============================================================================
 # ■ Game_Battler
 #==============================================================================
 
 class Game_Battler
 if @hzhj_alias_method_for_state_animation.nil?
 alias hzhj_old_ini_gb_state_animation initialize
 alias hzhj_old_add_state add_state
 alias hzhj_old_remove_state remove_state
 @hzhj_alias_method_for_state_animation = true
 end
 #--------------------------------------------------------------------------
 # ● 定义实例变量
 #--------------------------------------------------------------------------
 attr_reader   :hzhj_add_state_id
 attr_reader   :hzhj_remove_state_id
 #--------------------------------------------------------------------------
 # ● 初始化对像
 #--------------------------------------------------------------------------
 def initialize
 @hzhj_add_state_id = []
 @hzhj_remove_state_id = []
 hzhj_old_ini_gb_state_animation
 end
 #--------------------------------------------------------------------------
 # ● 附加状态
 #--------------------------------------------------------------------------
 def add_state(state_id, force = false)
 old_states = @states.clone
 hzhj_old_add_state(state_id, force)
 return if old_states == @states
 zjdzt = (@states | old_states) & @states
 jsdzt = (@states | old_states) & old_states
 for i in zjdzt
 if $data_states.animation_id > 0
 if not @hzhj_add_state_id.include?(i)
 @hzhj_add_state_id.push(i)
 end
 end
 end
 for i in jsdzt
 if $data_states.animation_id > 0
 if not @hzhj_remove_state_id.include?(i)
 @hzhj_remove_state_id.push(i)
 end
 end
 end
 end
 #--------------------------------------------------------------------------
 # ● 解除状态
 #--------------------------------------------------------------------------
 def remove_state(state_id, force = false)
 old_states = @states.clone
 hzhj_old_remove_state(state_id, force)
 return if old_states == @states
 zjdzt = (@states | old_states) & @states
 jsdzt = (@states | old_states) & old_states
 for i in zjdzt
 if $data_states.animation_id > 0
 if not @hzhj_add_state_id.include?(i)
 @hzhj_add_state_id.push(i)
 end
 end
 end
 for i in jsdzt
 if $data_states.animation_id > 0
 if not @hzhj_remove_state_id.include?(i)
 @hzhj_remove_state_id.push(i)
 end
 end
 end
 end
 end
 #==============================================================================
 # ■ Sprite_Battler
 #==============================================================================
 
 class Sprite_Battler < RPG::Sprite
 if @hzhj_alias_sb_for_state_animation.nil?
 alias hzhj_old_init_sb_for_state_animation initialize
 alias hzhj_old_update_sb_for_state_animation update
 @hzhj_alias_sb_for_state_animation = true
 end
 #--------------------------------------------------------------------------
 # ● 初始化
 #--------------------------------------------------------------------------
 def initialize(*args)
 hzhj_old_init_sb_for_state_animation(*args)
 if not @battler.nil?
 @battler.hzhj_add_state_id.clear
 @battler.hzhj_remove_state_id.clear
 for i in @battler.states
 next if $data_states.nil?
 next if $data_states.animation_id == 0
 next if $data_animations[$data_states.animation_id].nil?
 @battler.hzhj_add_state_id.push(i)
 end
 end
 end
 #--------------------------------------------------------------------------
 # ● 刷新
 #--------------------------------------------------------------------------
 def update
 hzhj_old_update_sb_for_state_animation
 if not @battler.nil?
 if @battler.damage.nil?
 if not @battler.hzhj_add_state_id.empty?
 for i in @battler.hzhj_add_state_id
 if @battler.state?(i)
 animation_id = $data_states.animation_id
 animation = $data_animations[animation_id]
 loop_animation(animation) if not animation.nil?
 end
 end
 @battler.hzhj_add_state_id.clear
 end
 if not @battler.hzhj_remove_state_id.empty?
 for i in @battler.hzhj_remove_state_id
 if not @battler.state?(i)
 animation_id = $data_states.animation_id
 animation = $data_animations[animation_id]
 stop_loop_animation(animation) if not animation.nil?
 end
 end
 @battler.hzhj_remove_state_id.clear
 end
 end
 end
 end
 end
 | 
 |