2012-07-31 55 views
0

我已經開始在iphone中使用cocos2d-x。我創建了一個繼承自cclayer的類。現在,當我嘗試將其註冊到觸發調度程序時,它會崩潰。Cocos2dx RegisterTouchDispatcher

在.h文件中:

類的BasePage:公衆的cocos2d :: CCLayer

而且.m文件:

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

你可以寫在.M(或的.cpp)僅此行的文件

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

其實你並不需要實現自己的RegisterTouchDispatcher。

只是調用下面的方法在構造函數或的OnEnter

setTouchEnabled(true); 
setTouchMode(kCCTouchesOneByOne); 

基類會做所有的爛攤子你。

此外,如果你想使穆蒂觸摸

PS你應該設置觸摸模式kCCTouchesAllAtOnce:如果您在自己的類重寫的OnEnter,remenber調用BaseClass的::的OnEnter()在擁有onEnter功能, like

MyLayer::onEnter() 
{ 
    CCLayer::onEnter(); 
    // do my own stuff 
}