2012-07-31 8 views
0

iphone에서 cocos2d-x를 사용하기 시작했습니다. 나는 cclayer로부터 상속받은 클래스를 만들었습니다. 이제 터치 디스패처로 등록하려고하면 충돌이 발생합니다.Cocos2dx RegisterTouchDispatcher

클래스베이스 페이지 : 대중적인 Cocos2D :: CCLayer

그리고하는 .m 파일 :

.H 파일에서

CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, INT_MIN + 1, true); 

그리고 ccobject.m 파일에 충돌 :

void CCObject::retain(void) 
{ 
    CCAssert(m_uReference > 0, "reference count should greater than 0");[here is crash] 

    ++m_uReference; 
} 

해결책을 좀주세요.

답변

0
bool SampleLayer::init() 
{ 
    if (!CCLayer::create()) 
      return false; 


    setTouchEnabled(true); 

    return true; 
} 

void SampleLayer::onEnter() 
{ 

CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, true); 
    CCNode::onEnter(); 

} 

void SampleLayer::onExit() 
{ 

    CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this); 
    CCNode::onExit(); 

} 

bool SampleLayer::ccTouchBegan(CCTouch* touch, CCEvent* event) 
{ 
    return true; 
} 

void SampleLayer::ccTouchMoved(CCTouch* touch, CCEvent* event) 
{} 

void SampleLayer::ccTouchEnded(CCTouch* touch, CCEvent* event) 
{} 
0

당신은 당신이 당신의 자신의 RegisterTouchDispatcher을 구현 할 필요가 없습니다 사실

CCDirector::sharedDirector()->getTouchDispatcher()->addStandardDelegate(this, 0); 
0

제출하는 .m (또는 통화 당) 만이 줄을 쓸 수 있습니다.

는 생성자에 아래의 메소드를 호출하거나 onEnter

setTouchEnabled(true); 
setTouchMode(kCCTouchesOneByOne); 

기본 클래스는 당신을 위해 모든 혼란을 할 것입니다. 당신이 무티 터치를

PS 있도록 싶다면

게다가, 당신은 kCCTouchesAllAtOnce에 터치 모드를 설정해야합니다 : 당신이 당신의 자신의 클래스에 onEnter 오버라이드 (override)하는 경우는, BaseClass로 전화를 remenber :: onEnter()을에 자신의 onEnter 함수, 같은

MyLayer::onEnter() 
{ 
    CCLayer::onEnter(); 
    // do my own stuff 
} 
관련 문제