본문 바로가기
엔트리/엔트리 액션 RPG만들기

엔트리 액션 RPG 만들기 3.장애물 인식하기, 맵 저장하기

by 할거없네 2020. 4. 20.

안녕하세요. 승승이입니다.

지난 시간에는 맵을 배치하는 기본적인 기능을 넣었습니다.

이번에는 맵을 배치하는 기능을 조금 더 추가 수정하여 장애물을 인식하고 맵 저장하는 기능을 만듭니다.

 

 

 

 

 


 

일단 캐릭터 오브젝트에 보시면 이동하는 코딩을 해 놓았을 겁니다.

현재 이 상태에 있는데, 키보드를 누르면 좌표를 움직이는 단순 구조입니다.

여기에 조금 더 추가해서 블럭을 인식해서, 블럭이 있는 곳은 가지 못하도록 하는 것입니다.

인식의 방법은 여러가지가 있지만 여기서는 '좌표'에 따른 '번호'를 가지고 인식하기로 합니다.

 

맵의 모든 픽셀을 가지고 계산하는 것이 아니라, 현재 위치에 해당되는 번호를 인식하는 겁니다.

 

 

즉 화면의 좌표 대신 위와 같은 1차원 배열의 표로 나누었다고 보시면 됩니다 ^^

 

캐릭터의 위치값은 30을 한칸으로 하여서 x, y좌표값을 계산한 다음에 위의 수식같이 만들어 주면 화면의 위치에 따른 '번호'를 부여합니다.

 

위와 같은 계산식을 넣으면 캐릭터의 번호는 45가 되는데...

 

이렇게 되어 있다고 보시면 됩니다.

 

이 방법은 한칸에 유닛과 맵블럭이 한칸씩 있다고 가정하였기 때문에 가능한 것입니다. 만약에 맵이 더 세분화해서 더 커진다면 엔트리는 렉천지가 될 수 있으니 적당한 타협으로 맵의 칸을 만들어 주는게 좋습니다.

대략적으로 30으로 나누어서 계산하는 것이기 때문에 엔트리의 성능으로 렉이 상당히 줄어들 것으로 기대됩니다.

 

 

그런 다음에 자신이 다음에 이동할 칸의 값을 구합니다.

앞으로 간다면 +1, 뒤로간다면-1이 될 것이고

위로 가면 +17, 아래로가면 -17번의 값을 알아내면 됩니다.

 

칸의 값은 이미 블럭리스트의 리스트값으로 정하였기 때문에 쉽게 알아낼 수 있습니다.

 

모든 방향에 대해서 조건을 구해주고, 이동불가지역인 경우 이동을 하지 못하게 하면 됩니다.

반대로 이동가능한 지역일 경우 이동하게 만들어 주면 되겠네요.

 

잘 동작하는 것을 확인할 수 있습니다.

 


 

 

다음은 블럭 오브젝트를 수정해서 맵을 만들어 저장하는 기능을 추가해 줍니다.

 

이번에는 엔트리에서 만든 맵 데이터를 저장하는 방법입니다.

스크래치의 경우 이것을 고민할 필요가 없는데.. 엔트리는 따로 저장하기 위한 방법을 생각해야 합니다.

그 방법은 엔트리 서버에 저장하는 건데, '실시간 리스트(또는 공유리스트)'의 기능을 사용하는 것입니다.

맵 데이터를 실시간리스트로 사용하면 되는 것입니다.

 

 

153의 길이를 가진 실시간 리스트를 만들어 주세요.

기존의 리스트 밑에 실시간 리스트의 값을 변화하는 것으로 추가합니다.

 

저장만 하기에는 불러오는 기능이 없으면 무용지물이므로, 서버에 저장된 맵도 불러오도록 해야합니다.

 

1부터 시작하는 변수 하나를 넣어서 서버의 리스트의 모든 값을 블럭리스트로 바꿔주는 것으로 간단히 만들 수 있습니다.

 

위의 블록을 시작하면 바로 로딩이 되도록 위치해주면 됩니다.

 

 

 

 

 

여기까지 캐릭터의 맵 인식과 맵을 저장/불러오기 기능을 추가하였습니다.

 

 

프로젝트보기:

http://naver.me/5oOWt5D0

 

Entry

 

playentry.org

 

댓글