캐릭터/이벤트(NPC)
2006.01.28 11:17

캐릭터들이 주인공을 줄줄이 따라오게 만들기

조회 수 3347 추천 수 0 댓글 6
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

[RpgXP스크립트] (F11)에 들어간 후

1. 왼쪽의 섹션창 맨 밑에 main 에 마우스 오른쪽버튼 클릭

2. 삽입을 누른 후, 빈칸을 만들고 섹션이름을 Member_Train 이라고 적습니다.

3.그곳의 오른쪽 스크립트 창에 아래의 소스를 넣습니다.

#==============================================================================
# ■ Member_Train
#------------------------------------------------------------------------------
#  동료를 기차처럼 나란히 따라오게 만드는 클레스입니다.
#==============================================================================

module Train_Actor

# ●투명상태용 스윗치 설정
# true 라면 스윗치 제어를 실시한다
# TRANSPARENT_SWITCH = true
TRANSPARENT_SWITCH = false

# ●투명상태용 스윗치 번호
# TRANSPARENT_SWITCH 가 true 로 , 이 번호의 스윗치가 ON라면 투명하게 된다
TRANSPARENT_SWITCHES_INDEX = 20

# ●엑터의 최대수
# 장래적으로 많은 사람 파티를 생기게 되면…
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
  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

  


List of Articles
분류 제목 조회 수 추천 수
긴급상황 발생시 연락처 안내 2702 0
니오팅 이용 규칙 (2013.01.05 3차 개정) 7 file 16461 0
여러분의 의견을 받습니다. 20 file 4777 2
캐릭터/이벤트(NPC) 케릭터 만드는 것 1 436 0
캐릭터/이벤트(NPC) 배틀러 이미지 만드는 방법 224 0
캐릭터/이벤트(NPC) 주인공 캐릭터 변경? 1 276 1
캐릭터/이벤트(NPC) RPG XP 비밀번호 만들기 2 (늑대인간님 요청) 394 0
캐릭터/이벤트(NPC) RPG XP 비밀번호 만들기 file 565 0
캐릭터/이벤트(NPC) 이벤트를 마칠때 "스위치"와 "일시삭제"기능 file 1985 0
캐릭터/이벤트(NPC) 문열고 들어가는 이벤트 3 2699 0
캐릭터/이벤트(NPC) 은행을 만들어 보자(이자와 대출 기능까지) 2 file 2823 6
캐릭터/이벤트(NPC) NPC가 주인공을 따라가게 하기(ysys1292님 요청) file 2516 0
캐릭터/이벤트(NPC) 게임 시작하자 마자 NPC움직이게 하기 랜덤으로 3 file 2496 0
캐릭터/이벤트(NPC) 특정 조건에 의해 나타났다가 시간이 지나면 사라지는 NPC 1 file 2860 0
캐릭터/이벤트(NPC) 아오오니 의자 옮기기 이벤트(흉내낸 거임) 3 file 3338 0
캐릭터/이벤트(NPC) 밖에 보이는 캐릭터 바꾸기 1 2495 0
캐릭터/이벤트(NPC) 문열고 들어가기 예제 file 2285 1
캐릭터/이벤트(NPC) 주인공을 따라다니는 사람 만들기 2 file 3546 0
캐릭터/이벤트(NPC) 배경음악 넣기 6 file 3176 0
캐릭터/이벤트(NPC) 불이 움직이는 전등만들기 2 file 3469 0
캐릭터/이벤트(NPC) 모락모락 피어오르는 모닥불 만들기 7 file 3835 0
캐릭터/이벤트(NPC) NPC 대기 시키기 2556 0
캐릭터/이벤트(NPC) NPC에게 말 걸고 NPC 이동시키기 5 file 3484 1
캐릭터/이벤트(NPC) 상점 이벤트 만들기 2846 0
캐릭터/이벤트(NPC) 특정한 레벨에 자동으로 마법 배우기 2163 0
캐릭터/이벤트(NPC) 주인공의 직업을 바꾸기 2111 0
캐릭터/이벤트(NPC) 게임 처음 시작 시 자동으로 아이템 장착하기 1909 1
캐릭터/이벤트(NPC) 주인공 레벨 업 시 능력치 상승치 바꾸기 1930 0
캐릭터/이벤트(NPC) 주인공 레벨 업 시 경험치 상승치 바꾸기 1902 0
캐릭터/이벤트(NPC) 주인공 캐릭터 칩 바꾸기 1 2602 0
캐릭터/이벤트(NPC) 모든 파티원들을 완전회복 시켜주기 1683 0
캐릭터/이벤트(NPC) 주인공 한명만 완전 회복 시켜주기 1654 0
캐릭터/이벤트(NPC) 주인공의 직업을 바꿔 주는 npc 만들기 1 2001 1
캐릭터/이벤트(NPC) 느낌표와 물음표 나오게 만들기 1 2659 0
캐릭터/이벤트(NPC) 제자리에서 움직이는 효과 만들기 2254 0
캐릭터/이벤트(NPC) 특정 레벨 이상부터 상점 이용하기 1859 0
캐릭터/이벤트(NPC) 주인공 바꾸기 강좌 1 file 2377 1
캐릭터/이벤트(NPC) 기초 변신강의 3 file 2931 5
캐릭터/이벤트(NPC) 캐릭터들이 주인공을 줄줄이 따라오게 만들기 6 3347 0
캐릭터/이벤트(NPC) 주인공을 변신시키기 3 2779 1
캐릭터/이벤트(NPC) 캐릭터 이동속도(빈도)를 빠르게하거나 느리게하기 2054 0
캐릭터/이벤트(NPC) 캐릭터 자동으로 점프 시키기 1747 0
캐릭터/이벤트(NPC) 캐릭터 자동으로 랜덤 이동시키기 1677 0
캐릭터/이벤트(NPC) 상점 만들기 1 2275 0
캐릭터/이벤트(NPC) 대화 만들기 2277 0
캐릭터/이벤트(NPC) 전투 만들기 2410 0
캐릭터/이벤트(NPC) 주인공을 변신시키는 NPC만들기 1565 1
캐릭터/이벤트(NPC) 주인공에게 물음표 애니메이션 넣기 1 1815 0
Board Pagination Prev 1 2 Next
/ 2

Copyright ⓒ Nioting All Rights Reserved. (since 1999)   개인정보취급방침