Cocos2d x Cocos2dx注册器TouchDispatcher
我已经开始在iphone中使用cocos2d-x。我创建了一个从cclayer继承的类。现在,当我试图用touch dispatcher注册它时,它崩溃了 在.h文件中: 类基本页:公共cocos2d::CCLayer 和.m文件: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
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
}