| 赞 | 0  | 
 
| VIP | 0 | 
 
| 好人卡 | 0 | 
 
| 积分 | 1 | 
 
| 经验 | 390 | 
 
| 最后登录 | 2013-7-17 | 
 
| 在线时间 | 13 小时 | 
 
 
 
 
 
Lv1.梦旅人 
	- 梦石
 - 0 
 
        - 星屑
 - 50 
 
        - 在线时间
 - 13 小时
 
        - 注册时间
 - 2013-7-9
 
        - 帖子
 - 23
 
 
 
 | 
	
2楼
 
 
 楼主 |
发表于 2013-7-13 20:26:44
|
只看该作者
 
 
 
class RPG::Tileset 
  #-------------------------------------------------------------------------- 
  # ● 获取脚印类型 
  #-------------------------------------------------------------------------- 
  def get_footprint_type(tag_id) 
    return false unless tag_id.is_a?(Integer) 
    self.note.split(/[\r\n]+/).each { |line| 
      if line =~ /\[fp_type #{tag_id} (\S+)\]/ 
        return $1.to_sym 
      end 
    } 
    return :none 
  end 
  #-------------------------------------------------------------------------- 
  # ● 获取脚印音效 
  #-------------------------------------------------------------------------- 
  def get_footprint_sound(tag_id) 
    return false unless tag_id.is_a?(Integer) 
    self.note.split(/[\r\n]+/).each { |line| 
      if line =~ /\[fp_sound #{tag_id} (\S+)\]/ 
        return $1 
      end 
    } 
    return "" 
  end 
  #-------------------------------------------------------------------------- 
  # ● 获取脚印淡出速度 
  #-------------------------------------------------------------------------- 
  def get_footprint_fade 
    self.note.split(/[\r\n]+/).each { |line| 
      if line =~ /\[fp_fade (\d+)\]/ 
        return $1.to_i 
      end 
    } 
    return 5 
  end 
end 
class Game_Footprint < Game_CharacterBase 
  attr_reader :type 
  attr_accessor :pattern 
  attr_accessor :character_name 
  attr_accessor :direction 
  attr_accessor :direction_fix 
 #-------------------------------------------------------------------------- 
  # ● 初始化 
  #-------------------------------------------------------------------------- 
  def initialize(t) 
    super() 
    return unless $game_player 
    @direction = $game_player.direction 
    self.type = t 
    @move_speed = 4 
    @move_frequency = 6 
    @priority_type = 0 
    @through = true 
    @transparent = true 
    moveto($game_player.x, $game_player.y) 
  end 
  #-------------------------------------------------------------------------- 
  # ● 设置类型 
  #-------------------------------------------------------------------------- 
  def type=(t) 
    @type = t 
    @character_name = "$footprint" 
    if @type != :normal 
      @character_name += "_" + @type.to_s 
    end 
    case @type 
    when :ripple 
      @step_anime = true 
      @stop_count = 8 
    end 
  end 
  #-------------------------------------------------------------------------- 
  # ● 脚印更新 
  #-------------------------------------------------------------------------- 
  def update 
    super 
    return if pos?($game_player.x, $game_player.y) 
    fadespeed = $game_map.tileset.get_footprint_fade 
    return if fadespeed == 0 
    if Graphics.frame_count % fadespeed == 0 
      @opacity -= 10 
    end 
  end 
end 
 
class Game_Footprints 
  #-------------------------------------------------------------------------- 
  # ● 初始化 
  #-------------------------------------------------------------------------- 
  def initialize 
    @data = [] 
  end 
  #-------------------------------------------------------------------------- 
  # ● 加入脚印 
  #-------------------------------------------------------------------------- 
  def push_fp(t=:normal) 
    footp = Game_Footprint.new(t) 
    footp.moveto($game_player.x, $game_player.y) 
    footp.set_direction($game_player.direction) 
    @data.push(footp) 
  end 
  #-------------------------------------------------------------------------- 
  # ● 设置类型 
  #-------------------------------------------------------------------------- 
  def type=(t) 
    @data.each{ |ft| 
      ft.type = t 
    } 
  end 
  attr_reader :data 
end 
class Game_Player < Game_Character 
 #-------------------------------------------------------------------------- 
  # ● 初始化 
  #-------------------------------------------------------------------------- 
  def initialize 
    @data = [] 
  end 
  #-------------------------------------------------------------------------- 
  # ● 加入脚印 
  #-------------------------------------------------------------------------- 
  def push_fp(t=:normal) 
    footp = Game_Footprint.new(t) 
    footp.moveto($game_player.x, $game_player.y) 
    footp.set_direction($game_player.direction) 
    @data.push(footp) 
  end 
  #-------------------------------------------------------------------------- 
  # ● 设置类型 
  #-------------------------------------------------------------------------- 
  def type=(t) 
    @data.each{ |ft| 
      ft.type = t 
    } 
  end 
  attr_reader :data 
end 
class Game_Player < Game_Character 
  #-------------------------------------------------------------------------- 
  # ● 清除移动资讯 
  #-------------------------------------------------------------------------- 
  alias footprint_clear_transfer_info clear_transfer_info 
  def clear_transfer_info 
    footprint_clear_transfer_info 
    @footprint = Game_Footprints.new 
  end 
 
attr_reader :data 
end 
class Game_Player < Game_Character 
  #-------------------------------------------------------------------------- 
  # ● 清除移动资讯 
  #-------------------------------------------------------------------------- 
  alias footprint_clear_transfer_info clear_transfer_info 
  def clear_transfer_info 
    footprint_clear_transfer_info 
    @footprint = Game_Footprints.new 
  end 
  #-------------------------------------------------------------------------- 
  # ● 返回脚印列表 
  #-------------------------------------------------------------------------- 
  def footprints 
    return @footprint.data 
  end 
  #alias footprint_moveto moveto 
  #def moveto(x, y) 
  #  footprint_moveto(x, y) 
    #push_footprint 
  #end 
  #-------------------------------------------------------------------------- 
  # ● 直线移动 
  #-------------------------------------------------------------------------- 
  alias footprint_move_straight move_straight 
  def move_straight(d, turn_ok = true) 
    previous_direction = @direction 
    footprint_move_straight(d, turn_ok) 
    if @move_succeed 
      push_footprint(previous_direction) 
    end 
  end 
#-------------------------------------------------------------------------- 
  # ● 新增脚印 
  #-------------------------------------------------------------------------- 
  def push_footprint(prev_dir=2) 
    return unless SceneManager.scene_is?(Scene_Map) 
    if @footprint.data.size > 0 
      adjust_diagonal_footprint(prev_dir, $game_player.direction) 
      @footprint.data[-1].transparent = false 
    end 
    type = check_terrain? 
    return unless type 
    @footprint.push_fp(type) 
    SceneManager.scene.add_footprint_sprite(@footprint.data[-1]) 
  end 
  def adjust_diagonal_footprint(last_dir, curr_dir) 
    return if last_dir == curr_dir 
    footprint = @footprint.data[-1] 
    name = footprint.character_name + "_dia" 
    return unless FileTest.exist?("Graphics/Characters/#{name}.png") 
    footprint.character_name = name 
    case last_dir+curr_dir 
    when 6 
      footprint.direction = 8 
    when 8 
      footprint.direction = 4 
    when 12 
      footprint.direction = 6 
    when 14 
      footprint.direction = 2 
    end 
  end 
  #-------------------------------------------------------------------------- 
  # ● 检查地形 
  #-------------------------------------------------------------------------- 
  def check_terrain? 
    terrain = $game_map.terrain_tag($game_player.x, $game_player.y) 
    type  = $game_map.tileset.get_footprint_type(terrain) 
    sound = $game_map.tileset.get_footprint_sound(terrain) 
    RPG::SE.new(sound).play if sound != "" 
    if type == :none 
      return false 
    else 
      return type 
    end 
  end 
end 
class Spriteset_Map 
  #-------------------------------------------------------------------------- 
  # ● 增加脚印精灵 
  #-------------------------------------------------------------------------- 
  def add_footprint(footprint) 
    @character_sprites.push(Sprite_Character.new(@viewport1, footprint)) 
  end 
  #-------------------------------------------------------------------------- 
  # ● 更新角色精灵 
  #-------------------------------------------------------------------------- 
  alias footprint_update_characters update_characters 
  def update_characters 
    footprint_update_characters # 调用原有方法 
    update_footsteps # 更新脚印 
  end 
  #-------------------------------------------------------------------------- 
  # ● 更新脚印精灵 
  #-------------------------------------------------------------------------- 
  def update_footsteps 
    @character_sprites.each {|sprite|  
      if sprite.character.is_a?(Game_Footprint) 
        sprite.character.update 
        if sprite.opacity <= 0 # 不透明度为0时 
          @character_sprites.delete(sprite) # 移除精灵 
          sprite.dispose # 释放脚印精灵 
        end 
      end 
    } 
  end 
end 
class Scene_Map < Scene_Base 
  #-------------------------------------------------------------------------- 
  # ● 加入脚印精灵 
  #-------------------------------------------------------------------------- 
  def add_footprint_sprite(footprint) 
    @spriteset.add_footprint(footprint) 
  end 
  #-------------------------------------------------------------------------- 
  # ● 创建地图精灵组 
  #-------------------------------------------------------------------------- 
  alias footprint_create_spriteset create_spriteset 
  def create_spriteset 
    footprint_create_spriteset 
    $game_player.push_footprint 
  end 
end 
 
 
窝朋友给的脚本第38行出错用不了QAQ |   
 
 
 
 |