본문 바로가기
# 게임/# cocos2d-x

cocos2d-x 인벤토리 만들기

by 쁘레레레레레 2020. 5. 14.

공부용 게임 만들기의 맨 마지막 코스였다.

 

지금까지 대략 이렇게 만들었다.

플레이어 생성 - 맵 구성 - 적 생성 - 적 인공지능 생성 - 적의 총알 발사 및 처리 - 인벤토리 생성

 

대략적인 구성이다. 

중간중간 함정이 많아서 고생도 했고 사실 좀 비 상식적인 방법으로 처리를 했으나 다 과정이라 생각했다.

 

인벤토리는 최대한 알고리즘을 이용해 구성하고 싶어서 노트에 펜으로 적어가며 구상을 했다.

 

탐색 속도, 중간 삽입 삭제에 용이해야 한다고 판단을 했고 어느 순간엔 STL Map에 LinkedList를 붙여서 체이닝을 생각했으나 ... 굳이? 생각이 들어서

 

B트리 혹은 레드블랙트리로 구성하려했으나.. 뜻대로 되지 않아서 나름 타협을 했고

 

결국 연결리스트로 구성하기로 했다.

 

 

땅에 버섯들과 롤 아이템들을 구성해놓았고  아이템 겹침을 따로 설정해두지 않았다.

 

사실 인벤토리 구성하고 아이템을 넣어주는것은 쉬웠는데  TAG에 관해서 참 난해했다.

 

먹은 아이템의 스프라이트 정보를 해당 칸에 그려줘야하는건데,  그렇게 필요한 정보는 해당 칸의 태그와 아이템의 태그인데 가장 큰 문제는 아이템창 중간에서 삭제 후 빈칸에 삽입해주는건데  그러기 위해서 따로 포인터가 필요했고

역시 m_pCurrent라는 이름으로 중간 백업해서 작업을 해주었으나 예상대로 되지 않았다.

 

그래서 따로 삭제할때 다음 노드에 연결작업이 끝나면 목록을 새로고침해서 당겨올까 생각을 했으나.. 뭔가 매끄럽지 못하고 원하던 방식도 아니라 작업하다 그대로 날렸다.

 

기초 알고리즘은 어느정도 공부를 다 했고  맨바닥에 규칙만보고 짰었으나 상급 알고리즘은 아직이라.. 

 

아무튼 인벤토리 구성하는데  애초에 C++도 독학했던데다 cocos2d-x조차도 모든 다큐먼트를 찾아서 공부하기엔 시간도 상황도 충분하지 않았다.

 

나와 같은 사람을 위해 내가 짠 방식을 알려주자면

inveoty클래스를 따로 만들어서 상속은 public cocos2d::Node

를 받았고

 

구조체를 이용해 링크드리스트를 구성했고

enum으로 weapons / food / resources 를 정의해줬다.

 

함수는 초기 빈칸? 구성을 위해 setInventory에 menuItemImage를 반복문으로 돌려서 채워줬고

addItem , removeAllItem , removeItemSpriteByKey , userClickItem 정도로 해주었다.

 

2020년 기준 약4~5?년전 cocos2d-x 인벤토리 관련 블로그를 참고해가며 만들었다.

 

 

 

'# 게임 > # cocos2d-x' 카테고리의 다른 글

alternative -수정예정-  (0) 2020.02.12
안드로이드 포팅시 해야할 설정 ※매우 귀찮음 주의  (0) 2020.02.06
physics editor & sprite sheet  (0) 2020.01.31
물리에 관하여  (0) 2020.01.31
조인트 종류  (0) 2020.01.21