RPG Maker
2006.01.03 04:37

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

조회 수 868 추천 수 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
번호 분류 제목 글쓴이 날짜 조회 수
1004 RPG Maker 물체 밀어서 움직이는 이벤트 조금 더 쉽게 하는 법 zero? 2018.01.02 644
1003 언어/기타 [마지막 3명 모집] [취업연계무료교육] VR/AR 게임 콘텐츠 전문가 양성 과정 교육생 모집 file 황금상자 2017.07.14 702
1002 RPG Maker rpg vxa 로 겜만들때 데미지 설정 공식[링크] 준E 2017.06.08 740
1001 RPG Maker [꿀팁] 간단하게 만들 수 있는 실시간 전투 시스템 1 file 준E 2017.03.31 2019
1000 언어/기타 JSON parser 변환데이터 저장시 생기는 Object Too Deep 해결하기 title: 댓글러lklslel 2016.12.24 851
999 언어/기타 앙뜨프리너십에서 해커톤 부트캠프 모집중이네요 file 마나님이 2016.11.08 908
998 RPG Maker RPG MV에서 플러그인 오류의 원인에 대하여 1 title: 댓글러lklslel 2016.07.08 2359
997 RPG Maker RPG MV 게임 도중에 윈도우 스킨 파일 자체를 통째로 바꿔버리는 방법 (출처: HIME) 최저 2016.07.08 1627
996 언어/기타 게임의 버전을 짜 보자! - 유의적 버전 2.0.0 Yanggaeng 2016.06.07 1123
995 RPG Maker 텍스트 대화 도중 메뉴 여는 방법을 알아냈습니다! 2 file 정궈니 2016.03.12 2938
994 RPG Maker rpgmv 마우스 지원과 터치 지원이 되니. 2 팡소리 2015.10.25 1011
993 RPG Maker RPG Maker MV 와 AJAX를 이용한 웹통신 관련 영상. 2 HT9MAN 2015.10.25 2246
992 언어/기타 RPG게임 뻔한요소들. 8 title: 천무천무 2015.10.05 1644
991 언어/기타 자바스크립트와 관련해서 참고할 만한 사이트들 3 MARCO 2015.10.04 921
990 언어/기타 꿀잼이군요! 3 사람님[대회참가] 2015.05.20 873
989 RPG Maker [RPG2000/3 팁] 간편한 이벤트 단축키 title: 자게이하앵 2015.04.06 1833
988 RPG Maker [RPG2000/3 팁] 간편한 이벤트 단축키 1 file title: 자게이하앵 2015.04.05 748
987 언어/기타 [강의링크] 대비법칙-색상대비-밀당의 재미 약한 반대색 설계 title: 천무천무 2015.04.02 636
986 언어/기타 오다 주웠습니다. 9 사람님[대회참가] 2015.03.30 917
985 언어/기타 무료 이미지 사이트 Pixabay! 9 file 나작소 2015.03.28 909
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 51 Next
/ 51


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

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