RPG Maker
2006.01.03 04:37

[VB] SRPG의 이동경로는 어떻게? (2)

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

단축키

Prev이전 문서

Next다음 문서

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

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
안녕하세요. 성령의분노입니다.

이번에는 지난번의 강좌를 토대로 진짜 SRPG의 이동경로에 대해 설명하겠습니다.

2. 최단거리를 찾는다.

다시 평원에서의 이동범위를 살펴볼까요?

                       1
                   1  2   1
               1  2  3   2  1
           1  2  3  4   3  2  1
              1  2  3   2  1
                 1  2   1
                    1        

현재 캐릭터는 숫자 4의 위치에 있지요.

최단거리로 걷는법은...
4부터 1까지 숫자를 따라서 가보세요 어떤 경로로 가셔도 됩니다. 4-> 3-> 2-> 1

최단경로...입니다;

Ex)
                       1
                   1  2   1
              ↑  2  3   2  1
           1 ← ← ←  3  2  1
              1  2  3   2  1
                 1  2   1
                    1      

자, 실제로 코딩을 해봅시다.

우선 목적지점까지 이동하는 경로를 새겨주어야 하겠지요.
새겨줄때에는 1에서부터 4까지 거꾸로 오는 것이 편합니다.

RunM(20,30) 이런 배열을 만듭니다 (경로를 표시하는 배열입니다).

Dim M As Long : M = 1 ( 경로를 찾을때 씁니다. M은 1로 초기화했는데 누른칸의 숫자여야 합니다. )

자, 제가 게임화면에서 이동할 칸을 눌렀습니다.

If 마우스가 눌러지고 & 눌러진 부분의 배열값이 0보다 크면 ( 즉, 이동범위내라면 ) then

ObjectX = Val(Format((pnt.curX) / 60, 0))
ObjectY = Val(Format((pnt.curY) / 48, 0))

눌러진 지점을 셀단위로 바꿔준 뒤에 목적지점을 지정합니다. Format은 소수점버림이고요. 60, 48은 한셀의 크기입니다. 이 것은 스크롤을 고려하지 않은것으로 스크롤되었다면 그 만큼 +-되어야겠지요.

MOX = ObjectX
MOY = ObjectY
ObjectX, ObjectY는 그 자리까지 이동할때까지는 보존되어야 하므로 임시로 MOX, MOY를 사용합니다.

For N = 1 To 4 목적지점까지 가려면 4번 돌려야 하지요 ( 유비의 이동력이 4칸이잖아요 ). 3칸만 가는칸이라도 마지막 한번은 제자리에 있기때문에 상관없습니다.

RunM(MOX, MOY) = 7      7은 임의의 숫자입니다. 경로 표시용, 운동장의 석회가루같은...

1에서 2를 찾고 2에서 3을찾고 그렇게 계속 가면서 숫자7을 RunM에 새겨나갑니다.

상하좌우의 순서로 하였는데 꼭 그렇게 하실필요는 없고요. 결론은 같지만 이동의 맵시가 달라지겠지요.

M이라는 변수가 있는데 이 변수를 통해, 눌러진 칸보다 높은 칸 ( 즉, 거슬러 올라가야할 칸 )을 찾아나가는 것입니다.

1       ->     1      ->     1             ->     1
                 2              2   3                 2   3    4

이런식으로요.

If Map(MOX + 1, MOY) = M + 1 Then
오른쪽의 숫자가 자신보다 크면 (그러니까 지금 M이 1이면 옆에 2를 찾아서)
MOX = MOX + 1
M = M + 1
ElseIf Map(MOX - 1, MOY) = M + 1 Then
MOX = MOX - 1
M = M + 1
ElseIf Map(MOX, MOY + 1) = M + 1 Then
MOY = MOY + 1
M = M + 1
ElseIf map(mox, moy - 1) = M + 1 Then
MOY = MOY - 1
M = M + 1
End If
Next
MOX, MOY를 상화좌우의 칸으로 검색해 높은 경로로 가서 RunM의 그 위치에 새겨나가는 겁니다.

M을 제가 1이라고 했는데, 1이 아니라 M은 누른칸의 이동력칸 숫자여야 합니다 ( 1편에서 Map이라는 배열에 새긴 이동력이요 ). 저도 여기서 버그가 났는데, 원본소스가 없어서 수정이 안되요 ㅠ_ㅠ


for문이 다 돌면 경로가 다 찍어지게 됩니다.

이제 위치에서 부터 7까지 찍어진 순서로 나아갑니다.

If RunM(캐릭터의 X좌표 + 1, 캐릭터의 Y좌표) = 7 Then
현재의 위치에서 오른쪽에 7이 있는지 찾습니다.

그 다음에 오른쪽으로 걸어가도록 코딩하세요.

오른쪽으로 걸어간 뒤에는
캐릭터의 X좌표 = 캐릭터의 X좌표 + 1
해줍니다.

좌상하 역시 마찬가지로 처리해 줍니다.

If ObjectX = 캐릭터의 X좌표 And ObjectY = 캐릭터의 Y좌표 Then
결국에 목적지에 도착하면 메뉴창이 뜨던지 공격범위가 뜨던지 하겠지요.

For J = 1 To 20
For K = 1 To 30
If Map(J, K) > 0 Then Map(J, K) = 0
다음번의 이동을 위해 다시 맵을 초기화 시켜줍니다. 장애물은 지우지 않도록 0보다 크면 초기화 시킵니다.
Next
Next
For J = 1 To 20
For K = 1 To 30
If RunM(J, K) = 7 Then RunM(J, K) = 0
Next
Next
End If


정리해서 보여드리면,

우선 경로를 표시할 때는
1       ->     1      ->     1             ->     1
                 2              2   3                 2   3    4

이런식으로 나아가며, 나아가면서 그 칸에 숫자7을 새기면서 갑니다.

걸어 갈때는 반대로 찾으면서 걸어가게 되구요.


이번에도 제대로 이해하셨을지 모르겠네요.

이걸로써 SRPG에서 이동범위를 표시하고 걸어가는 방법에 대해 설명이 모두 끝났습니다.

회원업로드 자료실의 서브젝트닐 역시 이 방식으로 만들었지만 절대로 최적화되지 않은 방법이므로, 갈고 닦아서 도움이 되시면 감사하겠습니다.

읽어주신 여러분들 감사드립니다.

저의 강좌는 여기서 끝입니다.
?

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
196 RPG Maker 게임메이커 기초개념 file 걸인소년 2006.01.14 933
195 RPG Maker [RPG2K~XP] 좌표를 통한 범위공격 1 Polaris君 2006.01.14 981
194 RPG Maker 게임메이커 기본개념 걸인소년 2006.01.14 341
193 RPG Maker 게임메이커 기본개념 걸인소년 2006.01.14 268
192 RPG Maker [초급]RPG2003 (프로젝트 만들기) 카스-오로치 2006.01.14 416
191 RPG Maker [초급] RPG2003 (숲을 가꾸어봅시다.) 카스-오로치 2006.01.14 417
190 RPG Maker [초급]RPG2003 [숲을 가꾸어 봅시다. -1] 카스-오로치 2006.01.14 309
189 RPG Maker 육성RPG 『연금술사』 2006.01.16 987
188 RPG Maker 프린세스메이커3를 만들어보자!!①.오프닝편 Ress 2006.01.16 1623
187 RPG Maker [토파즈]대화, 선택지, 상인 만들기 양키 2006.01.16 432
186 RPG Maker RPG XP 배워보기 <이벤트소멸효과> 덩키동크 2006.01.22 722
185 RPG Maker [초급]숲을 가꾸어 봅시다. 카스-오로치 2006.01.24 1415
184 RPG Maker 공격패턴의 다양화 사토루 2006.01.24 295
183 RPG Maker 죄송합니다!!질문입니다!!!!!!!!!(타일관련;;) 마가미카무이 2006.01.25 421
182 RPG Maker 공격패턴의 다양화 사토루 2006.01.29 1600
181 RPG Maker XP버전 이름입력처리 초보자용 린쌍 2006.01.30 520
180 RPG Maker 픽쳐대전의 불가능 설명(X파일대 수석박사 사토루 교수님 특별초대) 사토루 2006.01.30 537
179 RPG Maker 픽쳐로 대전을? 마사님 예제 부탁드립니다! v29 2006.01.31 507
178 RPG Maker [rpg2000]페이지의 순서와 이벤트의 출력 [夢想家] 2006.02.02 427
177 RPG Maker [미약한 팁]RM2000->XP로 오면서 약간 달라진 점 Ress 2006.02.02 697
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 15 Next
/ 15






[개인정보취급방침] | [이용약관] | [제휴문의] | [후원창구] | [인디사이드연혁]

Copyright © 1999 - 2016 INdiSide.com/(주)씨엘쓰리디 All Rights Reserved.
인디사이드 운영자 : 천무(이지선) | kernys(김원배) | 사신지(김병국)