창작에 관련된 질문이나 간단한 팁, 예제를 올리는 곳
글 수 185
cocos2d와 달리,
윈도우 환경에서 cocos2d-x 프로그램을 짜보면
상속을 받았음에도 update, ccTouchesBegan 등의 함수가 작동되지 않음을 알 수 있다.
터치 해결법:
OnEnter와 OnExit를 추가하고,
다음 같이 적어준다.
void HelloWorld::onEnter()
{
//단일 터치일 때. ccTouchBegan을 활성화 시켜준다.
//CCTouchDispatcher::sharedDispatcher()->addTargetedDelegate(this, 0, true);
//다중 터치일 때. ccTouchesBegan을 활성화 시켜준다.
CCTouchDispatcher::sharedDispatcher()->addStandardDelegate(this, 0);
CCLayer::onEnter();
}
void HelloWorld::onExit()
{
CCTouchDispatcher::sharedDispatcher()->removeDelegate(this);
CCLayer::onExit();
}
이렇게 한 뒤, 터치 처리 부분에 브레이크 포인트를 걸어보면 정상적으로 작동된다는 걸 알 수 있다.
update를 작동하게 하려면, 스케쥴러를 등록해줘야 한다.
CCScene* HelloWorld::scene()
{
CCScene * scene = NULL;
do
{
// 'scene' is an autorelease object
scene = CCScene::node();
CC_BREAK_IF(! scene);
// 'layer' is an autorelease object
HelloWorld *layer = HelloWorld::node();
CC_BREAK_IF(! layer);
// add layer as a child to scene
scene->addChild(layer);
layer->schedule(schedule_selector(HelloWorld::update));
} while (0);
// return the scene
return scene;
}
빨간 색으로 된 부분. 이것을 추가해줘야 update가 프레임별로 발생한다.
근데, 굳이 이렇게 작동하게 할 거면 상속은 도대체 무슨 의미가 있는가 의문이 든다...
사실 다른 함수 만들고 저기에 등록해도 update와 같은 역할을 한다.