adsense



[cocos2d-x] UserData 활용

그동안 이런게 있는 줄 모르고,
추가적인 파라미터(HP, 공격력, 방어력, 드롭템 등)가 필요한 경우가 있으면
Sprite를 상속하는 클래스를 별도로 만들어서 써 왔는데요,

BOX2D공부하면서 바디에 연결된 스프라이트를 userData로 지정하는 걸 보다보니, 어 이런 비슷한 api 일반 Node에서도 본 것 같은데?

해서 찾아보니 있길래, 이렇게 쓰면 될려나? 싶어서 해 보니,

되네요..

이정도면 어지간해서는 굳이 클래스를 새로 만들지 않아도 되겠습니다.
그동안 내 나쁜 머리 때문에 고생한 몸과 코드에게 리스펙.


예를 들어 아래와 같은 구조체가 있다고 하면
typedef struct _ATTR {
int hp;
int drop;
} ATTR;



- ATTR 구조체를 setUserData를 통해 스프라이트 객체에 연결하고
- 불러내서 사용하고(값 변경 등)
- 스프라이트와 함께 삭제하기
    //적용
{
auto sprite = Sprite::create("character.png");
sprite->setPosition(0, 0);

ATTR* attr = new ATTR;
attr->hp = 10;
attr->drop = 0;
sprite->setUserData(attr);
this->addChild(sprite);
}

//사용
{
ATTR* attr = (ATTR*)sprite->getUserData();
attr->hp = attr->hp - 1;
int dropItem = attr->drop;
}

//제거
{
ATTR* attr = (ATTR*)sprite->getUserData();
CC_SAFE_DELETE(attr);
sprite->removeFromParent();
}




이번에는 자료형만 연결해 봤는데,

혹시 구조체에다가 std::function 정의하고 콜백처럼 로직 등록해서 써도 되..지 않을까요?
이건 되나 안되나 해보고 다음에..

덧글

댓글 입력 영역
* 비로그인 덧글의 IP 전체보기를 설정한 이글루입니다.


Books

Geek라이프

게임 매니악스 슈팅 게임 알고리즘
마츠우라 켄이치로,츠카사 유키 공저/손정도 역/박민근,Pope Kim 감수

게임 매니악스 퍼즐 게임 알고리즘
마츠우라 켄이치로,츠카사 유키 공저/김병국 역

만들면서 배우는 유니티 게임 프로그래밍
송용성 저

핵심강좌! Cocos2d-x
이재환 저

될 수 있어! SE 8
나츠미 코지 저/Ixy 그림/김경훈 역
예스24 | 애드온2