#======================================================================# 脚本来自www.66rpg.com,使用或转载请保留此信息# 功能:多状态动画同时显示# 版本:2.01# 作者:后知后觉 2011-3-2# 使用方法:插入Main前即可# 冲突可能:只要在你的脚本编辑器内没有对 RPG::Sprite 或 Sprite_Battler 类# 以下三个方法做出过别的定义 则就有较大的兼容性# loop_animation# dispose_loop_animation# update_loop_animation#======================================================================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 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 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][i].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][i].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[i].nil? if $data_states[i].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 endend#==============================================================================# ■ 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[i].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[i].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[i].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[i].animation_id > 0 if not @hzhj_remove_state_id.include?(i) @hzhj_remove_state_id.push(i) end end end endend#==============================================================================# ■ 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[i].nil? next if $data_states[i].animation_id == 0 next if $data_animations[$data_states[i].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[i].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[i].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 endend#======================================================================# 脚本来自 www.66rpg.com 使用或转载请保留此信息# 功能:多状态动画同时显示# 版本:2.01# 作者:后知后觉 2011-3-2# 使用方法:插入Main前即可#======================================================================复制代码
使用方法:
将本系统主脚本放在 Main 的上面 and 【KDS改】原内部数据 的下面.
然后将此补丁放在本系统主脚本的下面即可.
#======================================================================# 脚本来自www.66rpg.com,使用或转载请保留此信息# 功能:多状态动画同时显示 梦幻群侠传系统专用补丁# 版本:2.01# 作者:后知后觉 2011-3-7# 使用方法:# 将本系统主脚本放在 Main 的上面 and 【KDS改】原内部数据 的下面.# 然后将此补丁放在本系统主脚本的下面即可.#======================================================================module RPG class Sprite < ::Sprite 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 endend#======================================================================# 脚本来自 www.66rpg.com 使用或转载请保留此信息# 功能:多状态动画同时显示 梦幻群侠传系统专用补丁# 版本:2.01# 作者:后知后觉 2011-3-7#======================================================================复制代码