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

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

조회 수 3998 추천 수 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
분류 제목 조회 수 추천 수
소지금/걸음수 돈으로 주인공의 경험치를 올려보자 2 file 2029 0
스위치 스위치 응용 1651 0
시스템 RPGXP 타이틀의 "게임시작","이어하기","숏다운" 문자를 변경시켜보자 1 file 2340 0
기능구현 "아오오니 게임" 아오오니가 따라오고 문까지 따서 쫒아오는 기능을 구현해보자! 11 file 4316 0
오류해결 파일Data/맵이름.rxdata 가 발견되지 않았습니다 "오류시 대처법 2 2195 0
숲 만들기 2 file 2122 1
시작하기 프로젝트 경로 찾아보기 1 file 2550 1
시작하기 프로젝트 이름 바꾸기 2 file 3386 1
설치하기 RPG만들기XP 설치하기 2 file 12223 5
캐릭터/이벤트(NPC) 기초 변신강의 3 file 2966 5
장르변경 커먼이벤트로 대쉬기능 만들기. 16 4087 9
변수/난수(랜덤) 기초, 변수란? 4 2591 5
기타 프로젝트 게임 이름 직접 바꾸기 10 file 3297 6
장르변경 RTS(전략시뮬레이션)선택&이동방식 예제 6 file 2666 0
기능구현 낚시 기능 구현하기 24 file 4134 8
퀘스트 [re] 전직퀘스트 만드는법 13 file 3224 1
퀘스트 빈츠님 요청 아이템 모아오기 퀘스트강좌 7 file 3517 3
장르변경 스크립트를 이용하지 않은 대쉬강좌 6 file 3042 7
장르변경 2페이지 액알기초강좌. 18 file 6772 11
장르변경 훨씬 멋진 액션알피지 만들기 19 5164 10
단축키 2P 입니다 8 file 2475 2
단축키 고정된 단축키 만들기 8 file 3018 8
마법/스킬/기술 시간제(스킬,펫 소환 등)버프 만들기[대기 사용] 14 file 2981 0
장르변경 예전에 썼었던 액알 커맨드 1 4281 0
장르변경 액알 장거리공격,범위공격 9 file 5055 1
맵 배치 이해하기 2 2826 13
집만들기, 움직이고 소리나는 문 만들기 5 file 4376 6
캐릭터/이벤트(NPC) 캐릭터들이 주인공을 줄줄이 따라오게 만들기 6 3998 0
기능구현 * 기타 - '대기'의 종류 2091 0
변수/난수(랜덤) 1. 변수 응용 프로그램 만들기 2 2392 0
변수/난수(랜덤) 랜덤(난수)을 이용해서 대화 만들기 1 2754 0
오프닝/엔딩 3 - 1. 게임 오프닝을 오프닝 응용해보기 9 3565 1
화면/애니메이션 3. 애니메이션을 효과적으로 사용하기 2 4001 0
장르변경 4 - 1 단거리 액션알피지 만들기 (크리티컬 + 콤보) 3211 1
장르변경 4. 단거리 액션 알피지 만들기 10 3901 0
커먼이벤트 7. 커먼(커스텀) 이벤트 만들어보기 1 2457 0
기능구현 8. 효과적인 게임 프로그래밍이란? 1 2175 0
기능구현 * 기타 RPG XP -> RPG2003 경험치 공식 변환하기 3341 0
기능구현 * 기타 - 명중 계산식 2 2218 0
게이지바 5. 새로운 게이지 만들기 (스테미너) 2613 0
게이지바 6 - 1. 경험치 게이지바 만들기 7 3338 0
게이지바 6. 체력, 마력, 스테미너 게이지만들기 13 3923 0
소스관리 소재 및 데이터 관리의 효율적 관리 1977 0
화면/애니메이션 11. 화면 연출 기법 및 사운드 사용법 2833 0
시작하기 프로젝트의 작성 file 2790 1
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 Next
/ 10

Copyright ⓒ Nioting All Rights Reserved. (since 1999)    개인정보
        

Fatal error: Cannot access property sessionController::$lifetime in /web/old/xe/modules/session/session.controller.php on line 45