플레이어
2005.01.29 11:34

캐릭터 4 방향 움직임 개선

조회 수 3156 추천 수 1 댓글 8
?

단축키

Prev이전 문서

Next다음 문서

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

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
Extra Form
! 주의사항

지금 쓰는 강좌은 개선하는 중인 엔진의 제작 과정과 순서, 방법등을 쓰는 것입니다. 원래 있는 스크립트를 고치는 작업입니다.
Ruby 언어를 기반으로 하므로 이해가 안되시는 부분은 댓글에 달아주시면
설명해드리겠습니다.
아울러, 이미 모두가 아는 내용일 수도 있습니다. ' -')

---------------------------------------------------------------------

저는 "데카"라고 합니다.

RPG XP의 전체적인 기능에 약간 실망해서, XP 엔진을 고치는 작업을 하고 있습니다.

엔진 이름은 정하지 않았으므로.. 적당한 이름을 알려주시면, 사례로 Ruby언어 강좌를 올리지요. ㅡ_-);;;

아울러 아직까지도 엔진은 개발 중이므로, 어느 정도 완성이 되면 니오티소프트 홈페이지에 스크립트를 올리겠습니다.

(저 교수에 발탁되면 이 강좌는 당연히 RPG XP 강좌 게시판에 넘어갈꺼에요.)

---------------------------------------------------------------------

Ys 2 Special 이라는 명작이 있었는데요.

놀랍게도 8방향으로 아주 부드러운 움직임을 보여주었죠.

개선중인 엔진의 첫번째 목적은 이러한 부드러운 움직임을 보여주면서,

움직이는 도중 방향 전환을 할 때 원운동을 하며 돌아가는 것입니다.

현재의 RPG XP는 32*32 타일 한 칸을 한꺼번에 움직이는 모습을 보여주지만

전 그게 싫습니다. ㅡ_-);

#-------------------------------------------------------------------
# class Game_Character
# 스크립트 데이터 이름은 Game_Character 3 입니다.
#-------------------------------------------------------------------

class Game_Character
  #------------------------------------------------------------------
  # ● 아래에 이동
  #     turn_enabled : 그 자리로의 향해 변경을 허가하는 플래그
  #------------------------------------------------------------------
  def move_down(turn_enabled = true)
    # 아래를 향한다
    if turn_enabled
      turn_down
    end
    # 통행 가능한 경우
    if passable?(@x, @y, 2)
      # 아래를 향한다
      turn_down
      # 좌표를 갱신
      @y += 1
      # 보수 증가
      increase_steps
    # 통행 불가능한 경우
    else
      # 접촉 이벤트의 기동 판정
      check_event_trigger_touch(@x, @y+1)
    end
  end

#-------------------------------------------------------------------


move_down 함수입니다.
(편의상 def로 정의된 것은 함수라고 부를께요. C언어에 익숙해서...)

다른건 넘어가고 이 부분을 보세요.

    if passable?(@x, @y, 2)
      # 아래를 향한다
      turn_down
      # 좌표를 갱신
      @y += 1
      # 보수 증가
      increase_steps
    # 통행 불가능한 경우
    else
      # 접촉 이벤트의 기동 판정
      check_event_trigger_touch(@x, @y+1)
    end


이 부분의 확실한 이해는 4방향 충돌검사에서 설명하도록 하고...
중간의 코드를 보시면,

      # 좌표를 갱신
      @y += 1
      # 보수 증가
      increase_steps

y라는 전역변수를 1 늘려서 increase_steps를 불렀습니다.
y 축으로 1칸 움직이라는 뜻이지요.
이 수치를 0.1로 바꿉니다.

    if passable?(@x, @y, 2)
      # 아래를 향한다
      turn_down
      # 좌표를 갱신
      @y += 0.1
      # 보수 증가
      increase_steps
    # 통행 불가능한 경우
    else
      # 접촉 이벤트의 기동 판정
      check_event_trigger_touch(@x, @y+1)
    end

끝입니다. -_-;

스크립트 아래로 가시면 move_left, move_right, move_up이 있습니다.
각각의 수치를 0.1로 고치시고 테스트 플레이하시면
상당히 부드러워진 움직임을 보실 수 있습니다.

(테스트 플레이시 반드시 F1을 눌러 고사양모드로 진행하세요.)

4방향의 부드러운 움직임은 이걸로 끝납니다. 하지만...
이 움직임에는 엄청난 버그가 있습니다!!
이 상태로 맵 만들어보시고 움직여보시면 아실껍니다. ㅡ_-);

4방향 충돌검사 알고리즘을 바꿔야 이 부분이 해결되니,
그 부분은 다음 강좌에서 하도록 하지요.

혹시나 직접 충돌검사 알고리즘을 고치고 싶으신 분은
Game_Character 1 에서 Ctrl + F를 누르시고
def passable? 을 검색하세요.
그 부분이 충돌 검사를 하는 알고리즘입니다.

(충돌 검사의 핵심은 Game_Map::passable? 입니다.
이 부분은 고치지 마세요. 이 함수만큼은 절대로 고치지 않고
이 엔진을 완성할껍니다.
혹시나 get_pixel 함수를 사용할 줄 아시는 분이라면
고치셔도 상관없습니다 -_-)

첫번째 강좌는 간단히 끝내겠습니다.
앞으로의 강좌는 이러한 순서로 될 것입니다.

(2) 4방향 충돌 검사
(3) 8방향 부드러운 움직임
(4) 8방향 충돌 검사
(5) 8방향 이벤트 충돌 검사 <-- 여기를 개발하고 있습니다. -_-
(6) 원운동을 하는 부드러운 움직임 <-- 여기까지 완성되면 소스 공개합니다.

그럼 다음 강좌는 RPG XP 게시판에서 뵙기를 -_-;

질문있으시면 댓글달아주세요.
그리고 엔진 이름 적당한거 있으면 댓글 달아주세요 -_-;
정말로 Ruby언어 강좌들어갑니다!

Tip 1) 0.1이라는 숫자는 알고리즘 작성을 쉽게 하기 위함이긴 하지만,
         다른 숫자로 하면 너무 느려지거나, 끊기는 듯한 느낌이 생겨서
         0.1이 가장 적절한 수치라고 생각하고 사용하였습니다.

Tip 2) main 에서 begin하기 전에 다음 스크립트를 사용해보세요

         Graphics.frame_rate = 60

         최대 프레임을 60으로 설정합니다. 이 부분이 좀 이상한게 있는데...
         게임이 빨라집니다 -_-;
         보통 이런 부분을 설정하면 게임의 속도는 변화가 없고
         화면 갱신 숫자만 바뀌어야하는데...
         이걸 알 수가 없군요 -_-; 하여튼...
         알아두시면 나중에 쓸모가 있을지도...

Tip 3) Game_Character은 1, 2, 3으로 나뉘어 있는데
         이 3페이지에 해당하는 모든 코드는 Game_Character라는 클래스로 정의되어 있습니다.
         결국 너무 길어서 나누어 놓은 것에 불과합니다. -_-;

  • ?
    이루 2005.02.01 21:47
    (도주중...)
  • ?
    데카 2005.02.01 22:45
    ㅡ_-);
  • ?
    Voss 2005.02.05 15:58
    쩝. 8방향을 설정하기 이렇게 힘든 이유라면 역시 루트때문이겠죠? 헥스라면 이런 고생은 안하겠는데....
  • ?
    크레시스 2005.02.15 13:41
    예제는 없나요?
  • ?
    이효민 2005.07.31 20:10
    저는 무슨 뜻인지 하나도 몰르겠어요ㅡㅠ
    질문좀 할게요
    스크립트는 뭐죠?
    또 저....수학계산(?)같은건 어디다가 써야하는거죠?
    알려주세요
  • ?
    꿈을 나는 알피지 2005.12.30 00:04
    적당한 이름:알피지 xp-프리 쯔꾸르
  • ?
    쩌우2 2006.01.16 23:57
    수학을 잘해야 사는 알피지 만들기 시리즈
  • ?
    ◐zoshua◑™ 2007.08.15 12:06
    그래서 만들기 귀찮아지는 알피지 만들기 시리즈


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