0

我已经开始在 iphone 中使用 cocos2d-x。我创建了一个继承自 cclayer 的类。现在,当我尝试使用触摸调度程序注册它时,它会崩溃。

在 .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;
}

你能给我一些解决方案吗?

4

3 回答 3

1
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)
{}
于 2013-09-03T02:42:02.817 回答
0

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

CCDirector::sharedDirector()->getTouchDispatcher()->addStandardDelegate(this, 0);
于 2013-12-13T09:02:08.690 回答
0

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

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

setTouchEnabled(true);
setTouchMode(kCCTouchesOneByOne);

基类会为你做所有的事情。

此外,如果您想启用多点触控,您应该将触控模式设置为kCCTouchesAllAtOnce

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

MyLayer::onEnter()
{
    CCLayer::onEnter();
    // do my own stuff
}
于 2014-04-30T05:11:09.313 回答