| 
 
| 赞 | 2 |  
| VIP | 19 |  
| 好人卡 | 10 |  
| 积分 | 3 |  
| 经验 | 57661 |  
| 最后登录 | 2019-5-20 |  
| 在线时间 | 574 小时 |  
 Lv2.观梦者 
	梦石0 星屑253 在线时间574 小时注册时间2006-8-25帖子969 | 
| 
人物跟随
x
加入我们,或者,欢迎回来。您需要 登录 才可以下载或查看,没有帐号?注册会员  
 复制代码#===================================================================
# 本脚本来自www.66RPG.com,使用和转载请保留此信息
#===================================================================
# ————————————————————————————————————
# ▼▲▼ XRXS13. パーティ列車移動 ver.1.02 ▼▲▼
# by fukuyama
#
# Train_Actor
#
# [email protected]
# http://www4.big.or.jp/~fukuyama/rgss/Train_Actor.txt
#
module Train_Actor
  #是否使用停止跟随的方法,也就是说,这里false改为true的时候,如果TRANSPARENT_SWITCHES_INDEX
  #开关打开,跟随的人物就消失了(其实只是变成透明而已)
  TRANSPARENT_SWITCH = true
  TRANSPARENT_SWITCHES_INDEX = 20
  #举例:第一个为true,第二个为20,则打开20号开关,后面的人都没了。
  #跟随人数的最大数目,可以更改为2、3什么的。
  TRAIN_ACTOR_SIZE_MAX = 2
  # 定数
  #Input::DOWN = 2
  #Input::LEFT = 4
  #Input::RIGHT = 6
  #Input::UP = 6
  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
           @tempneme = actor.name           
        else
           @character_name = ""
           @character_hue = 0
           @tempneme = ""       
        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
    
    def name
        return @tempneme
    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
attr_writer :step_anime
end
module 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 Scene_Map_Module
def setup_actor_character_sprites(characters)
@spriteset.setup_actor_character_sprites(characters)
end
end
module 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.class.method_defined?('setup_actor_character_sprites')
$scene.setup_actor_character_sprites(@characters)
end
end
def update_party_actors
setup_actor_character_sprites
transparent = $game_player.transparent
if transparent == false
if TRANSPARENT_SWITCH
transparent = $game_switches[TRANSPARENT_SWITCHES_INDEX]
end
end
for character in @characters
character.transparent = transparent
character.move_speed = $game_player.move_speed
character.step_anime = $game_player.step_anime
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 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(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 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
attr_reader :move_speed
attr_reader :step_anime
end
end # module Train_Actor
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
#==================================================================
# 本脚本来自www.66RPG.com,使用和转载请保留此信息
#==================================================================
 飞空术
 
 复制代码#==============================================================================
# 本脚本来自www.66RPG.com,使用和转载请保留此信息
#============================================================================== 
# 自定义内容解释:
# TOWNS[编号]=["地名,可以随便写",开关编号,[传送去的地图id,传送去的地图x,
#              传送去的地图y],角色朝向]
#
# 编号请按照0、1、2、3……顺序往下排布
# 当编号的开关打开的时候,才可以选择这个传送地点
# 角色朝向,2为下,4为左,6为右,8为上,具体可以参考自己数字小键盘的方向和数字关系
# 如果是其他方向请自己改。
# 
# 需要制作脚本,请点击66rpg.com最底部的QQ交谈
#
# 使用方法:在需要传送的传送门、传送石、传送羽毛、传送旅店一类的地方使用公共事件:
#           呼叫脚本:$scene = Scene_Teleport.new
#
# 制作者:柳柳
#==============================================================================
TOWNS=[]
TOWNS[0]=["真新镇",1,[2,14,15],2]
TOWNS[1]=["真新镇",2,[2,14,15],2]
TOWNS[2]=["真新镇",3,[2,14,15],2]
TOWNS[3]=["真新镇",4,[2,14,15],2]
TOWNS[4]=["真新镇",5,[2,14,15],2]
TOWNS[5]=["真新镇",6,[2,14,15],2]
#==============================================================================
# ■ Window_Teleport
#------------------------------------------------------------------------------
#  处理传送的窗口
#==============================================================================
class Window_Teleport < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
  def initialize
    super(640,640,64,64)
    self.contents = Bitmap.new(width, height)
    self.opacity = 180
    get_towns
    draw_towns
    @column_max = 1
  end
  #--------------------------------------------------------------------------
  # ● 获取可到达的城镇和窗口大小
  #--------------------------------------------------------------------------
  def get_towns
    @carol3_towns = []
    @width_temp = 0
    @cont_use = false
    for town in TOWNS
      if $game_switches[town[1]]==true
        @carol3_towns.push(town)
        if contents.text_size(town[0]).width >= @width_temp
          @width_temp = contents.text_size(town[0]).width
        end
      end
    end
    @item_max = @carol3_towns.size
    if @item_max == 0
      @carol3_towns[0] = ["没有可以传送的地方",1,[1,1,1]]
      @width_temp = contents.text_size(@carol3_towns[0][0]).width
      @item_max = 1
      @cont_use = true
    end
    self.width = [@width_temp+32,480].min
    self.height = [(@item_max+1)*32,360].min
    self.x = (640-self.width)/2
    self.y = (480-self.height)/2
    self.contents = Bitmap.new(width-32,row_max*32)
  end
  #--------------------------------------------------------------------------
  # ● 描绘城镇名称
  #--------------------------------------------------------------------------
  def draw_towns
    for i in 0...@carol3_towns.size
      self.contents.draw_text(0,i*32,@width_temp,32,@carol3_towns[i][0],1)
    end
  end
  #--------------------------------------------------------------------------
  # ● 返回的内容
  #========================================================================
  # ● 地图编号
  #--------------------------------------------------------------------------
  def map_id
    return @carol3_towns[self.index][2][0]
  end
  #--------------------------------------------------------------------------
  # ● 地图x坐标
  #--------------------------------------------------------------------------
  def map_x
    return @carol3_towns[self.index][2][1]
  end      
  #--------------------------------------------------------------------------
  # ● 地图y坐标
  #--------------------------------------------------------------------------
  def map_y
    return @carol3_towns[self.index][2][2]
  end 
  #--------------------------------------------------------------------------
  # ● 角色朝向
  #--------------------------------------------------------------------------
  def map_direction
    return @carol3_towns[self.index][2][3]
  end 
  #--------------------------------------------------------------------------
  # ● 判断是否一个城市都没有
  #--------------------------------------------------------------------------
  def cant_use?
    return @cont_use
  end 
end
#==============================================================================
# ■ Scene_Teleport
#------------------------------------------------------------------------------
#  处理传送执行的类
#==============================================================================
class Scene_Teleport
  #--------------------------------------------------------------------------
  # ● 主处理
  #--------------------------------------------------------------------------
  def main
    $game_system.se_play($data_system.decision_se)
    @carol3_trans_white = false
    @carol3_map_sprite = Spriteset_Map.new
    @carol3_teleport_window = Window_Teleport.new
    if @carol3_teleport_window.cant_use?
      @carol3_teleport_window.index = -1
    else
      @carol3_teleport_window.index = 0
    end
    @carol3_teleport_window.active = true
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      carol3_update
      if $scene != self
        break
      end
    end    
    if @carol3_trans_white==true
      @carol3_white_sprite = Sprite.new
      @carol3_white_sprite.bitmap = Bitmap.new(640,480)
      @carol3_white_sprite.opacity = 0
      @carol3_white_sprite.bitmap.fill_rect(0, 0, 640, 480, Color.new(255,255,255,255)) 
      for i in 0..20
        @carol3_white_sprite.opacity += 15
        @carol3_teleport_window.opacity -= 12
        @carol3_teleport_window.contents_opacity -= 12
        Graphics.update
      end
      Graphics.freeze
      Graphics.transition(0)
      Graphics.update
      @carol3_map_sprite.dispose
      $game_map.setup($game_temp.player_new_map_id)
      $game_player.moveto($game_temp.player_new_x, $game_temp.player_new_y)
      $game_player.turn_down
      $game_player.straighten
      $game_map.autoplay      
      Graphics.frame_reset
      for i in 0..20
        @carol3_white_sprite.opacity -= 15
        Graphics.update
      end
      @carol3_white_sprite.dispose
      @carol3_teleport_window.dispose
      Graphics.freeze
    else
      Graphics.freeze
      @carol3_teleport_window.dispose
      @carol3_map_sprite.dispose
    end    
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面
  #--------------------------------------------------------------------------
  def carol3_update
    @carol3_teleport_window.update
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      $scene = Scene_Map.new
      return
    end
    if Input.trigger?(Input::C)
      if @carol3_teleport_window.index == -1
        $game_system.se_play($data_system.cancel_se)
        $scene = Scene_Map.new
        return
      else        
        $game_temp.player_new_map_id = @carol3_teleport_window.map_id
        $game_temp.player_new_x = @carol3_teleport_window.map_x
        $game_temp.player_new_y = @carol3_teleport_window.map_y
        $game_temp.player_new_direction = @carol3_teleport_window.map_direction
        $game_temp.player_transferring = true
        $game_temp.transition_processing = true
        $game_temp.transition_name = ""
        $scene = Scene_Map.new
        @carol3_trans_white = true
        Audio.se_play("Audio/SE/" + "018-Teleport01",100,100)
        return
      end
    end    
  end
end
#==============================================================================
# 本脚本来自www.66RPG.com,使用和转载请保留此信息
#============================================================================== 
 冲突:人物跟随脚本
 234行
 undefinbd method `setup_actor_character_sprites' for nil:NilClass
 
 
 
 
 ----------------版务----------------
 如果问题未解决,请继续提问
 如果问题已解决,请结贴
 若到末贴发贴时间后一周仍未结贴
 管理员会自动为你过期帖子、结贴或强行认可答案(好人卡-1)
 
 
 此贴于 2008-2-19 3:54:57 被版主凌冰提醒,请楼主看到后对本贴做出回应。
 | 
 |