我已开始在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;
}
你能帮我解决一下吗?
答案 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
}