Cocos2d x Cocos2dx注册器TouchDispatcher

Cocos2d x Cocos2dx注册器TouchDispatcher,cocos2d-x,Cocos2d X,我已经开始在iphone中使用cocos2d-x。我创建了一个从cclayer继承的类。现在,当我试图用touch dispatcher注册它时,它崩溃了 在.h文件中: 类基本页:公共cocos2d::CCLayer 和.m文件: CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, INT_MIN + 1, true); 它在ccobject.m文件中崩溃: void CCOb

我已经开始在iphone中使用cocos2d-x。我创建了一个从cclayer继承的类。现在,当我试图用touch dispatcher注册它时,它崩溃了

在.h文件中:

类基本页:公共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;
}

你能给我一些解决办法吗?

你只能在.m(或.cpp)文件中写这一行

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)
{}

事实上,您不需要实现自己的RegisterTouchDispatcher

只需在构造函数或onEnter中调用下面的方法

setTouchEnabled(true);
setTouchMode(kCCTouchesOneByOne);
基类会为你做所有的事情

此外,如果要启用多点触摸,应将触摸模式设置为kCCTouchesAllAtOnce

ps:如果您在自己的类中重写了oneter,请记住在您自己的oneter函数中调用BaseClass::oneter(), 像

setTouchEnabled(true);
setTouchMode(kCCTouchesOneByOne);
MyLayer::onEnter()
{
    CCLayer::onEnter();
    // do my own stuff
}