2012-07-31 52 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 
}