#======================================== # 本脚本来自www.66rpg.com #======================================== class Game_Character #-------------------------------------------------------------------------- # ● 刷新画面 #-------------------------------------------------------------------------- def update # 跳跃中、移动中、停止中的分支 if jumping? update_jump elsif moving? update_move else update_stop end # 动画计数超过最大值的情况下 # ※最大值等于基本值减去移动速度 * 1 的值 if @anime_count > 18 - @move_speed * 2 # 停止动画为 OFF 并且在停止中的情况下 if not @step_anime and @stop_count > 0 # 还原为原来的图形 @pattern = @original_pattern # 停止动画为 ON 并且在移动中的情况下 else # 更新图形 fps = @character_name.split(/_/)[1] != nil ? @character_name.split(/_/)[1].to_i : 4 @pattern = (@pattern + 1) % fps end # 清除动画计数 @anime_count = 0 end # 等待中的情况下 if @wait_count > 0 # 减少等待计数 @wait_count -= 1 return end # 强制移动路线的场合 if @move_route_forcing # 自定义移动 move_type_custom return end # 事件执行待机中并且为锁定状态的情况下 if @starting or lock? # 不做规则移动 return end # 如果停止计数超过了一定的值(由移动频度算出) if @stop_count > (40 - @move_frequency * 2) * (6 - @move_frequency) # 移动类型分支 case @move_type when 1 # 随机 move_type_random when 2 # 接近 move_type_toward_player when 3 # 自定义 move_type_custom end end end end #=============================================== # ■ Sprite_Character #------------------------------------------------- # 角色显示用脚本。监视 Game_Character 类的实例、 # 自动变化脚本状态。 #===============================================
class Sprite_Character < RPG::Sprite #--------------------------------------- # ● 更新画面 #----------------------------------------- def update super # 元件 ID、文件名、色相与现在的情况存在差异的情况下 if @tile_id != @character.tile_id or @character_name != @character.character_name or @character_hue != @character.character_hue # 记忆元件 ID 与文件名、色相 @tile_id = @character.tile_id @character_name = @character.character_name @character_hue = @character.character_hue # 元件 ID 为有效值的情况下 if @tile_id >= 384 self.bitmap = RPG::Cache.tile($game_map.tileset_name, @tile_id, @character.character_hue) self.src_rect.set(0, 0, 32, 32) self.ox = 16 self.oy = 32 # 元件 ID 为无效值的情况下 else self.bitmap = RPG::Cache.character(@character.character_name, @character.character_hue) fps = @character.character_name.split(/_/)[1] != nil ? @character.character_name.split(/_/)[1].to_i : 4 @cw = bitmap.width / fps @ch = bitmap.height / 4 self.ox = @cw / 2 self.oy = @ch end end # 设置可视状态 self.visible = (not @character.transparent) # 图形是角色的情况下 if @tile_id == 0 # 设置传送目标的矩形 sx = @character.pattern * @cw sy = (@character.direction - 2) / 2 * @ch self.src_rect.set(sx, sy, @cw, @ch) end # 设置脚本的坐标 self.x = @character.screen_x self.y = @character.screen_y self.z = @character.screen_z(@ch) # 设置不透明度、合成方式、茂密 self.opacity = @character.opacity self.blend_type = @character.blend_type self.bush_depth = @character.bush_depth # 动画 if @character.animation_id != 0 animation = $data_animations[@character.animation_id] animation(animation, true) @character.animation_id = 0 end end end |