| 
 
| 赞 | 0 |  
| VIP | 1 |  
| 好人卡 | 11 |  
| 积分 | 1 |  
| 经验 | 17928 |  
| 最后登录 | 2018-9-22 |  
| 在线时间 | 461 小时 |  
 Lv1.梦旅人 
	梦石0 星屑55 在线时间461 小时注册时间2008-11-19帖子607 | 
| 
本帖最后由 sai90306 于 2011-12-10 19:00 编辑
x
加入我们,或者,欢迎回来。您需要 登录 才可以下载或查看,没有帐号?注册会员  
 想請問在使用角色跟隨腳本的前提下
 利用離隊腳本將角色離隊
 並且使離隊的腳色留在原地要怎作到呢?
 
 目前想到的方法是建一個新腳本 調用腳色跟隨腳本中的"角色位置變數" ,將這個角色位置的變數存起來,如下
 class Save_Loc < Game_Party_Actor #Save_Loc是我自己新建的類別,Game_Party_Actor是角色跟隨腳本中的類別
 def loc_save(new_x,new_y) #new_x,new_y是角色跟隨腳本中最後得到的腳色位置
 @save_x = new_x
 @save_y = new_y
 super
 end
 end #我是腳本苦手+小白中的小白...不知有沒有打錯...
  
 然後接著判斷角色是否在隊伍中
 不在的話讓該角色(或該事件)的位置設定為從角色跟隨腳本取得的位置(save_x,save_y),這樣子...
  
 不過我不知道調用系統內建的哪個數據才能判斷"角色是否在隊伍中"
 有沒有哪位大神能幫忙呢? 感謝!!
 
 
 
 附上我借用的離隊腳本和角色跟隨系統腳本
 复制代码    # ▼▲▼ XRXS13. Train_Actor ▼▲▼
    # by fukuyama
    #
    # [email protected]
    # http://www4.big.or.jp/~fukuyama/
    #
    # ●透明状態用スイッチ設定
    # true だとスイッチ制御を行う
    # TRAIN_ACTOR_TRANSPARENT_SWITCH = true
    TRAIN_ACTOR_TRANSPARENT_SWITCH = true
    # ●透明状態用スイッチ番号
    # この番号のスイッチがONだと透明になる
    #設定跟隨系統的開關
    TRAIN_ACTOR_TRANSPARENT_SWITCHES_INDEX = 1
    # ●アクターの最大数
    # 将来的に多人数パーティが出来るようになったら…
    TRAIN_ACTOR_SIZE_MAX = 4
    # 定数
    #Input::DOWN = 2 # この辺はちゃんと定数あった…
    #Input::LEFT = 4
    #Input::RIGHT = 6
    #Input::UP = 8
    DOWN_LEFT = 1
    DOWN_RIGHT = 3
    UP_LEFT = 7
    UP_RIGHT = 9
    JUMP = 5
    class Game_Party_Actor < Game_Character
    def initialize
    super()
    @through = true
    end
    def setup(actor)
    # キャラクターのファイル名と色相を設定
    if actor != nil
    @character_name = actor.character_name
    @character_hue = actor.character_hue
    else
    @character_name = ""
    @character_hue = 0
    end
    # 不透明度と合成方法を初期化
    @opacity = 255
    @blend_type = 0
    end
    def screen_z(height = 0)
    if $game_player.x == @x and $game_player.y == @y
    return $game_player.screen_z(height) - 1
    end
    super(height)
    end
    #--------------------------------------------------------------------------
    # ● 下に移動
    # turn_enabled : その場での向き変更を許可するフラグ
    #--------------------------------------------------------------------------
    def move_down(turn_enabled = true)
    # 下を向く
    if turn_enabled
    turn_down
    end
    # 通行可能な場合
    if passable?(@x, @y, Input::DOWN)
    # 下を向く
    turn_down
    # 座標を更新
    @y += 1
    end
    end
    #--------------------------------------------------------------------------
    # ● 左に移動
    # turn_enabled : その場での向き変更を許可するフラグ
    #--------------------------------------------------------------------------
    def move_left(turn_enabled = true)
    # 左を向く
    if turn_enabled
    turn_left
    end
    # 通行可能な場合
    if passable?(@x, @y, Input::LEFT)
    # 左を向く
    turn_left
    # 座標を更新
    @x -= 1
    end
    end
    #--------------------------------------------------------------------------
    # ● 右に移動
    # turn_enabled : その場での向き変更を許可するフラグ
    #--------------------------------------------------------------------------
    def move_right(turn_enabled = true)
    # 右を向く
    if turn_enabled
    turn_right
    end
    # 通行可能な場合
    if passable?(@x, @y, Input::RIGHT)
    # 右を向く
    turn_right
    # 座標を更新
    @x += 1
    end
    end
    #--------------------------------------------------------------------------
    # ● 上に移動
    # turn_enabled : その場での向き変更を許可するフラグ
    #--------------------------------------------------------------------------
    def move_up(turn_enabled = true)
    # 上を向く
    if turn_enabled
    turn_up
    end
    # 通行可能な場合
    if passable?(@x, @y, Input::UP)
    # 上を向く
    turn_up
    # 座標を更新
    @y -= 1
    end
    end
    #--------------------------------------------------------------------------
    # ● 左下に移動
    #--------------------------------------------------------------------------
    def move_lower_left
    # 向き固定でない場合
    unless @direction_fix
    # 右向きだった場合は左を、上向きだった場合は下を向く
    @direction = (@direction == Input::RIGHT ? Input::LEFT : @direction == Input::UP ? Input::DOWN : @direction)
    end
    # 下→左、左→下 のどちらかのコースが通行可能な場合
    if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::LEFT)) or
    (passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::DOWN))
    # 座標を更新
    @x -= 1
    @y += 1
    end
    end
    #--------------------------------------------------------------------------
    # ● 右下に移動
    #--------------------------------------------------------------------------
    def move_lower_right
    # 向き固定でない場合
    unless @direction_fix
    # 左向きだった場合は右を、上向きだった場合は下を向く
    @direction = (@direction == Input::LEFT ? Input::RIGHT : @direction == Input::UP ? Input::DOWN : @direction)
    end
    # 下→右、右→下 のどちらかのコースが通行可能な場合
    if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::RIGHT)) or
    (passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::DOWN))
    # 座標を更新
    @x += 1
    @y += 1
    end
    end
    #--------------------------------------------------------------------------
    # ● 左上に移動
    #--------------------------------------------------------------------------
    def move_upper_left
    # 向き固定でない場合
    unless @direction_fix
    # 右向きだった場合は左を、下向きだった場合は上を向く
    @direction = (@direction == Input::RIGHT ? Input::LEFT : @direction == Input::DOWN ? Input::UP : @direction)
    end
    # 上→左、左→上 のどちらかのコースが通行可能な場合
    if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::LEFT)) or
    (passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::UP))
    # 座標を更新
    @x -= 1
    @y -= 1
    end
    end
    #--------------------------------------------------------------------------
    # ● 右上に移動
    #--------------------------------------------------------------------------
    def move_upper_right
    # 向き固定でない場合
    unless @direction_fix
    # 左向きだった場合は右を、下向きだった場合は上を向く
    @direction = (@direction == Input::LEFT ? Input::RIGHT : @direction == Input::DOWN ? Input::UP : @direction)
    end
    # 上→右、右→上 のどちらかのコースが通行可能な場合
    if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::RIGHT)) or
    (passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::UP))
    # 座標を更新
    @x += 1
    @y -= 1
    end
    end
    attr_writer :move_speed
    end
    module Train_Actor_Spriteset_Map_Module
    def setup_actor_character_sprites?
    return @setup_actor_character_sprites_flag != nil
    end
    def setup_actor_character_sprites(characters)
    if !setup_actor_character_sprites?
    index_game_player = 0
    @character_sprites.each_index do |i|
    if @character_sprites[i].character.instance_of?(Game_Player)
    index_game_player = i
    break
    end
    end
    for character in characters.reverse
    @character_sprites.unshift(
    Sprite_Character.new(@viewport1, character)
    )
    end
    @setup_actor_character_sprites_flag = true
    end
    end
    end
    module Train_Actor_Scene_Map_Module
    def setup_actor_character_sprites(characters)
    @spriteset.setup_actor_character_sprites(characters)
    end
    end
    module Train_Actor_Game_Party_Module
    def set_transparent_actors(transparent)
    @transparent = transparent
    end
    def setup_actor_character_sprites
    if @characters == nil
    @characters = []
    for i in 1 ... TRAIN_ACTOR_SIZE_MAX
    @characters.push(Game_Party_Actor.new)
    end
    end
    for i in 1 ... TRAIN_ACTOR_SIZE_MAX
    @characters[i - 1].setup(actors[i])
    end
    if $scene.instance_of?(Scene_Map)
    $scene.setup_actor_character_sprites(@characters)
    end
    end
    def update_party_actors
    setup_actor_character_sprites
    transparent = $game_player.transparent
    if transparent == false
    if TRAIN_ACTOR_TRANSPARENT_SWITCH
    transparent = $game_switches[TRAIN_ACTOR_TRANSPARENT_SWITCHES_INDEX]
    end
    end
    for character in @characters
    character.transparent = transparent
    character.move_speed = $game_player.move_speed
    character.update
    end
    end
    def moveto_party_actors( x, y )
    setup_actor_character_sprites
    for character in @characters
    character.moveto( x, y )
    end
    if @move_list == nil
    @move_list = []
    end
    move_list_setup
    end
    def move_party_actors
    if @move_list == nil
    @move_list = []
    move_list_setup
    end
    @move_list.each_index do |i|
    if @characters[i] != nil
    case @move_list[i].type
    when Input::DOWN
    @characters[i].move_down(@move_list[i].args[0])
    when Input::LEFT
    @characters[i].move_left(@move_list[i].args[0])
    when Input::RIGHT
    @characters[i].move_right(@move_list[i].args[0])
    when Input::UP
    @characters[i].move_up(@move_list[i].args[0])
    when DOWN_LEFT
    @characters[i].move_lower_left
    when DOWN_RIGHT
    @characters[i].move_lower_right
    when UP_LEFT
    @characters[i].move_upper_left
    when UP_RIGHT
    @characters[i].move_upper_right
    when JUMP
    @characters[i].jump(@move_list[i].args[0],@move_list[i].args[1])
    end
    end
    end
    end
    class Train_Actor_Move_List_Element
    def initialize(type,args)
    @type = type
    @args = args
    end
    def type() return @type end
    def args() return @args end
    end
    def move_list_setup
    for i in 0 .. TRAIN_ACTOR_SIZE_MAX
    @move_list[i] = nil
    end
    end
    def add_move_list(type,*args)
    @move_list.unshift(Train_Actor_Move_List_Element.new(type,args)).pop
    end
    def move_down_party_actors(turn_enabled = true)
    move_party_actors
    add_move_list(Input::DOWN,turn_enabled)
    end
    def move_left_party_actors(turn_enabled = true)
    move_party_actors
    add_move_list(Input::LEFT,turn_enabled)
    end
    def move_right_party_actors(turn_enabled = true)
    move_party_actors
    add_move_list(Input::RIGHT,turn_enabled)
    end
    def move_up_party_actors(turn_enabled = true)
    move_party_actors
    add_move_list(Input::UP,turn_enabled)
    end
    def move_lower_left_party_actors
    move_party_actors
    add_move_list(DOWN_LEFT)
    end
    def move_lower_right_party_actors
    move_party_actors
    add_move_list(DOWN_RIGHT)
    end
    def move_upper_left_party_actors
    move_party_actors
    add_move_list(UP_LEFT)
    end
    def move_upper_right_party_actors
    move_party_actors
    add_move_list(UP_RIGHT)
    end
    def jump_party_actors(x_plus, y_plus)
    move_party_actors
    add_move_list(JUMP,x_plus, y_plus)
    end
    end
    module Train_Actor_Game_Player_Module
    def update
    $game_party.update_party_actors
    super
    end
    def moveto( x, y )
    $game_party.moveto_party_actors( x, y )
    super( x, y )
    end
    def move_down(turn_enabled = true)
    if passable?(@x, @y, Input::DOWN)
    $game_party.move_down_party_actors(turn_enabled)
    end
    super(turn_enabled)
    end
    def move_left(turn_enabled = true)
    if passable?(@x, @y, Input::LEFT)
    $game_party.move_left_party_actors(turn_enabled)
    end
    super(turn_enabled)
    end
    def move_right(turn_enabled = true)
    if passable?(@x, @y, Input::RIGHT)
    $game_party.move_right_party_actors(turn_enabled)
    end
    super(turn_enabled)
    end
    def move_up(turn_enabled = true)
    if passable?(@x, @y, Input::UP)
    $game_party.move_up_party_actors(turn_enabled)
    end
    super(turn_enabled)
    end
    def move_lower_left
    # 下→左、左→下 のどちらかのコースが通行可能な場合
    if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::LEFT)) or
    (passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::DOWN))
    $game_party.move_lower_left_party_actors
    end
    super
    end
    def move_lower_right
    # 下→右、右→下 のどちらかのコースが通行可能な場合
    if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::RIGHT)) or
    (passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::DOWN))
    $game_party.move_lower_right_party_actors
    end
    super
    end
    def move_upper_left
    # 上→左、左→上 のどちらかのコースが通行可能な場合
    if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::LEFT)) or
    (passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::UP))
    $game_party.move_upper_left_party_actors
    end
    super
    end
    def move_upper_right
    # 上→右、右→上 のどちらかのコースが通行可能な場合
    if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::RIGHT)) or
    (passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::UP))
    $game_party.move_upper_right_party_actors
    end
    super
    end
    def jump(x_plus, y_plus)
    # 新しい座標を計算
    new_x = @x + x_plus
    new_y = @y + y_plus
    # 加算値が (0,0) の場合か、ジャンプ先が通行可能な場合
    if (x_plus == 0 and y_plus == 0) or passable?(new_x, new_y, 0)
    $game_party.jump_party_actors(x_plus, y_plus)
    end
    super(x_plus, y_plus)
    end
    # -----------------------------------------------
    # move_speed を外から見れるように
    # -----------------------------------------------
    attr_reader :move_speed
    end
    class Game_Party
    include Train_Actor_Game_Party_Module
    end
    class Game_Player
    include Train_Actor_Game_Player_Module
    end
    class Spriteset_Map
    include Train_Actor_Spriteset_Map_Module
    end
    class Scene_Map
    include Train_Actor_Scene_Map_Module
    end
    # Train_Actor
 | 
 |