당연히 안된다.


혹시나 하고 기대했지만.. 역시나...


스레드로 돌려달라고 친절하게 요청했지만 cocos2d-x가 보여주는 결과물은 이전 포스트의 결과물과 똑같다... 리소스 로딩할때 프레임 스탑...ㅜㅜ

(참고로 MapManager::reload() 내부에서 cocos2d::TMXTiledMap::create()를 호출한다.)


앞이 모두 막힌 현 상황에서 너무 힘들다. 모두 내 공부가 부족한 탓이겠지만...


원래의 목적이었던 2d seamless를 포기하고 평범한 rpg를 만드느냐, 계속 하느냐 고민이다.


정확히 뭘 공부해서 어느 부분을 어떻게 바꿔야지 계획이라도 보인다면 힘들어도 그대로 할텐데,

어떻게 짜야할 지 아예 감이 안온다.

보류해놓고 책 읽고 공부나 해야되나...


Posted by RPG만들기XP
,

https://github.com/seokmin/2d_map/tree/v0.1_refactoring


더러운 줄줄이 반복 코드가 너무 많아서 "아 이게 바로 고수님들이 말씀하시던 리팩토링을 해야 하는 순간인가" 하고는 리팩토링을 시도하였다.


안 된다.


분명 깔끔하게 해결할 수 있을 것 같은 부분이 엄청 많은데 안된다.


ㅠㅠ

Posted by RPG만들기XP
,


깃허브 링크 - https://github.com/seokmin/2d_map/tree/v0.1

*사실 아무도 안봤으면 좋겠다. 더럽고 더럽고 더럽고 더럽고 더럽고 더러운 코드들... 더러운 코드들... 더티 코드 베리베리 더티 코드즈...



맵을 n*m칸으로 쪼개어 저장해놓으면, 바둑판 모양으로 그래프를 쭈욱 그려서 메모리상에는 항상 캐릭터가 위치한 zone을 중심으로 한 9개의 맵만 띄워놓는다.

일단은 캐릭터가 속해있는 맵의 경계선을 지날 때 가려는 방향의 맵을 새로 메모리에 올리고, 지나온 방향의 맵을 메모리에서 내린다.

만약에 전체 맵(n*m개의 zone을 전부 붙여놓은)의 경계선을 지난다면, 전체 맵을 순환하게 해놓았다.(지구는 둥그니까)

아직 타일 이미지만 화면에 띄우는 것이라 엄청 간단한 일이고, 맵에 딸린 이벤트, NPC, 각종 오브젝트들까지 이 방법으로 구현하려면 멀고도 험한 길이 될 것 같다.

하지만 일단 목표로 했던 "타일 이미지라도 오픈월드로 돌아다닐 수 있게 만들자!"는 달성했다.


그런데... 만들다보니 엄청난 벽에 느닷없이 부딪혀 버렸는데..

영상에서 보다시피 로딩할 때 걸리는 시간때문에 zone을 넘어다닐 때 게임이 멈춰버린다.

이러면 눈으로 보기에만 seamless이지 사실은 게임에 전혀 써먹을 수도 없고, 일랜시아, 바람의나라같은 흔한 맵 시스템과 다를 것이 없다.

따라서 맵을 메모리에 올리고 내리는 과정을 백그라운드에서 진행해야 매끄럽게 돌아갈텐데, cocos2d-x가 백그라운드 리소스 로딩을 지원하지 않는 것으로 알고 있어서 엄청난 멘붕에 빠져버렸다.

어찌어찌 해서 MapManager 로직을 따로 빼서 멀티스레드로 돌린다고 하더라도, 로직을 분리해봤자 리소스를 로드하고 그려주는 cocos2d-x가 싱글스레드로 동작하는 이상 해결 방도가 없다는 것..

방법은

1. cocos2d-x를 뜯는다.

2. 엔진을 만든다.

3. 포기한다.


3번은 절대 싫다.

1번은 내 실력이 미천해서 어렵고 힘들고 엄청난 시간과 노력을 요하는 과정일 것 같다.

2번은 내 실력이 미천해서 어렵고 힘들고 어렵고 힘들고 어렵고 힘들고 불가능한 과정일 것 같다.


일단 구글링(...)을 비롯해 여러 곳에서 해결 가능한 방법이 있는지를 알아보고, 정 해결 방법이 없다고 한다면 고민을 많이 해봐야 할 것 같다.

Posted by RPG만들기XP
,