cocos2dx-3.3里输入框的光标怎么实现????

我用cocos2dx-2.2.5输入框的光标方法改写到cocos2dx-3.3不能实现,添加光标 this->addChild(m_pCursorSprite); 就报系统CCLabel.cpp的有错。
//光标精灵
Sprite *m_pCursorSprite;
//光标动画
Action *m_pCursorAction;
//输入框内容
std::string *m_pInputText;

//初始化光标精灵
void CursorInput::initCursorSprite()
{
int column = 4;
int nHeight = 20;
int pixels;
for (int i=0; i<nHeight; ++i)
{
for (int j=0; j<column; ++j)
{
pixels* = 0xffffffff;
}
}
Texture2D* texture = new Texture2D();
texture->initWithData(pixels,80,Texture2D::PixelFormat::RGB888, 1, 1, CCSizeMake(column, nHeight));
//3.3-initWithData( , ssize_t dataLen, Texture2D::PixelFormat pixelFormat, , , );
//2.2.5-initWithData( , CCTexture2DPixelFormat pixelFormat, , , );
m_pCursorSprite = Sprite::createWithTexture(texture);
m_pCursorSprite->setColor(ccc3(255,0,0));
Size winSize = getContentSize();
m_pCursorSprite->setPosition(ccp(0, winSize.height / 2));
this->addChild(m_pCursorSprite);

m_pCursorSprite->setVisible(false);

m_pCursorAction = RepeatForever::create((ActionInterval *) Sequence::create(FadeOut::create(0.25f), FadeIn::create(0.25f), NULL)); 
m_pCursorSprite->runAction(m_pCursorAction);
m_pInputText = new std::string();

}*

删除这些
m_pCursorSprite->setPosition(ccp(0, winSize.height / 2));
this->addChild(m_pCursorSprite);
m_pCursorSprite->runAction(m_pCursorAction);
代码:
/光标精灵
Sprite *m_pCursorSprite;
//光标动画
Action *m_pCursorAction;
//输入框内容
std::string *m_pInputText;

//初始化光标精灵
void CursorInput::initCursorSprite()
{
int column = 4;
int nHeight = 20;
int pixels;
for (int i=0; i<nHeight; ++i)
{
for (int j=0; j<column; ++j)
{
pixels = 0xffffffff;
}
}
Texture2D* texture = new Texture2D();
texture->initWithData(pixels,20,Texture2D::PixelFormat::RGB888, 4 ,20, CCSizeMake(column, nHeight));
m_pCursorSprite = Sprite::createWithTexture(texture);
m_pCursorSprite->setColor(ccc3(255,0,0));
Size winSize = getContentSize();
m_pCursorSprite->setVisible(false);

m_pCursorAction = RepeatForever::create((ActionInterval *) Sequence::create(FadeOut::create(0.25f), FadeIn::create(0.25f), NULL)); 
m_pInputText = new std::string();

}
再从调用输入框的层里获取输入框位置。
virtual void setPosition(const CCPoint& pos);
void setCursorPositionX(float x); // 设置光标x位置
// 把光标添加到和输入框一起的层中
void AddCursor(CCNode *node);
void CursorInput::setPosition(const CCPoint& pos)
{
CCTextFieldTTF::setPosition(pos);
// 设置光标位置
if (NULL != m_pCursorSprite)
{
CCSize winSize = getContentSize();
m_cursorPos = ccp(0, 0/winSize.height / 2/);
m_cursorPos = m_cursorPos + pos;
m_pCursorSprite->setPosition(m_cursorPos);
}
}
void CursorInput::setCursorPositionX(float x) // 设置光标x位置
{
CCPoint pt = getPosition(); // 获取输入框位置
m_pCursorSprite->setPositionX(pt.x + x);
}
// 把光标添加到和输入框一起的层中
void CursorInput::AddCursor(CCNode *node)
{
if (NULL != node && NULL != m_pCursorSprite)
{
node->addChild(m_pCursorSprite);
m_pCursorSprite->runAction(m_pCursorAction);
}
}
然后调用输入框的层里,输入框的后面添加:
CursorInput *m_pAccInput;
m_pAccInput->AddCursor(this);

可以分享一下吗?大哥

兄弟 可以分享一下吗

同样遇到这个问题 但是原来的版本用不了

…你以为我会告诉你。。
3.3的Label是不能有child的么?

对啊 大兄弟 一旦addChild 就直接崩了,请问要怎么解决

给完整点啊

http://blog.csdn.net/adroitly/article/details/46663677
有需要的可以看看!

大赞 :14:

详细且有用~~~~非常感谢!!