2016-10-17 1 views
1

V1에 내 cocos2d-x 앱을 업데이트하려고하는데 콜백이 필요합니다.cocos2d-x v3 매개 변수/변수로 CallFunc 사용 방법

이 같은 람다와 통화 백업을 할 수는 잘 작동 -

auto mcb = CallFunc::create([this](){ 
    this->doCallback(kEVENT_MENU_IS_ONSCREEN); 
}); 

hex->runAction(Sequence::create(somethingthattakestime, mcb, NULL)); 

을 그러나, 나는/사용 후, 내 객체에 저장하는 기능에 CallFunc 변수를 전달 몇 가지를 호출 할 미래의 시점. 클래스에서

나는 정의 -

CallFunc * callfunc; 

설정을 간단한로 -

item->callfunc = callfunc; 

함수 내에서 -

void LBMenuAddMenuItemName(CallFunc * callfunc); 

나는 또한 않도록 정적 CallFunc 변수를 선언 주변에 달려있다 -

내가 이것을 사용하고자 할 때

나중에 내가 할 -

Sequence * seq = Sequence::create(callfunc,NULL); 
somesprite->runAction(seq); 

그러나, 이것은 SIGSEGV (GLThread)와 심하게 끝납니다.

typeid (callfunc) .name()을 사용하면 callfunc가 CallFunc임을 보여줍니다. 선언시 setTag (69)를 사용하고 SIGSEGV 전에 getTag()를 사용하면 의미있는 값을 반환하지 않습니다.

지연 콜백에 대해 내가 잘못하고 올바른 방법을 설명 할 수 있습니까?

감사합니다.

LB

답변

0

시도 많은 일들은 내가 할 때이 오류가 도망 간다 발견 선언 후 '() 유지'-

doSoloPlay->retain(); 

이것은 참조 카운트를 증가시킨다.

저는 왜 이것이 필요한지 잘 모르겠습니다. 내 생각 엔 cocos2d-x 클래스가 영리한 쓰레기 수거를 할 수 있을까요?

0

나중에 함수를 콜백으로 호출하면 함수를 저장하고 적절한 시점에 해제 할 때 콜백을 유지해야합니다.

정적 선언은 CCCallFunc의 주소 만 저장하지만 실행하기 전에 클래스가 파괴됩니다.

관련 문제