Cocos2dx RegisterTouchDispatcher

时间:2012-07-31 06:58:07

标签: cocos2d-x

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

在.h文件中:

类BasePage:public 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;
}

你能帮我解决一下吗?

3 个答案:

答案 0 :(得分: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)
{}

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

只需在构造函数或onEnter

中调用下面的方法
setTouchEnabled(true);
setTouchMode(kCCTouchesOneByOne);

基类将为你做所有的混乱。

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

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

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