2023년 11월 18일 토요일

[cocos2d-x] 2d 게임엔진으로 플래피버드 클론 게임 만들기 (스프라이트, 스프라이트프레임, 스프라이트프레임 캐시)

 


스프라이트와 스프라이트 프레임 (Sprite vs(?) SpriteFrame)

스프라이트는 이미지를 화면에 표시하기 위한 노드이고

스프라이트 프레임은 메모리에 자리하는 이미지입니다.

스프라이트를 파일로 생성하는 것과 프레임으로 생성하는 것의 차이는

Sprite::create - 파일을->텍스처(이미지)로 등록하여->이 텍스처로 스프라이트 노드를 생성

Sprite::createWithFrame - 메모리에 등록된 스프라이트 프레임으로 스프라이트 노드를 생성

단, 메모리에 스프라이트 프레임이 등록되어있지 않으면 파일을->텍스처(이미지)로 등록하여->스프라이트 프레임으로 사용

메모리상의 프레임에 억세스하기 위해 이름을 붙여 관리하는 것이

스프라이트 프레임 캐시입니다.

텍스처 아틀라스기 때문에 일부를 Rectangle로 쪼개서 다루는 것도 가능하며

쪼갠 상태를 캐시에 등록해서 쓸 수도 있습니다.



이번에 마녀 캐릭터의 애니메이션은 위 한 장의 이미지를 쪼개서 WITCH0, WITCH1이라는 이름으로 프레임 캐시에 등록해

이것으로 애니메이션을 생성해서 사용합니다. (4장 중 앞의 두 장만 사용)

여기서는 수동으로 쪼개서 썼지만,

plist를 사용해서 자동으로 다량의 프레임 캐시를 등록할 수도 있습니다.(Texture Packer등의 툴 사용)

하기에 따라서는 json 같은 걸 만들어 수동으로 파싱하는 것도 물론 가능.

복수의 액션을 병행해서 실행하기

영상에서 설명되지 않았지만 한 가지 짚고 넘어갈게 있는데,

하나의 노드에 대해 복수의 트윈(=액션)을 동시에 실행하려면,

영상에서는 MoveBy와 Animate의 두 가지 runAction을 복수로 실행하고 있습니다.

원래는 Spawn이라는, 복수의 트윈을 실행하기 위한 트윈이 존재합니다.

runAction을 여러번 줄 것인지, Spawn을 쓸 것인지 좋은 것으로 쓰면 되지만

써 보면 알 수 있는게, Spawn을 쓰는게 의외로 코딩하기 불편하고 가독성도 나빠집니다.

특히 Sequence를 써서 긴 액션을 나열하게 되면 불편함이 도드라집니다.

개인차일지도 모르겠지만 저는 비추천.

댓글 없음:

댓글 쓰기

[cocos2d-x] 2D 엔진으로 만드는 3D 슈팅게임

왜 2D 게임엔진으로 3D 게임 만들려고 삽질을 합니까?   예 뭐 3D 게임 만드는데 좋은 엔진은 아닙니다. 셰이더도 부실하고 물리엔진 쓰기도 까다롭고. 요즘은 외부업체 SDK 인트하기도 점점 힘들어지고.. ​ 그래도 기왕 해 본 거, 여기까지 왔으...