Cocos2d-x 3.4 之 文本输入之 EditBox
***************************************转载请注明出处:http://blog.csdn.net/lttree********************************************
上一篇,说了 文本输入的 CCTextFieldTTF, 这次继续来弄文本输入,EditBox
做完CCTextFieldTTF以后,马上就搞这个EditBox了, 但是,改动有些多,而且好多BUG啊,网上资料也不多,整的我焦头烂额。。。 先发一些基础的,具体其他功能,等它完善一些吧。。
一、简介 同CCTextFieldTTF一样,看一下 EditBox 的类继承图, 这里说一下,网上的查到的都是下面这样的,到cocos2d-x 3.0 API为止(应该是中文最高版本),也是这样的
就是说 EditBox类是由 ControlButton类和IMEDelegate类继承而来, 在讨论 CCTextFieldTTF时就有说过,它就像 动态的Label, 那这个,就是动态的Button了。 ————But 在3.4 api中,它的类继承图改变了:
IMEDelegate没变,这是输入法的代理类,但是另一个变成了 Widget 类,这个类查一查就可以发现,它:
就列在这里,具体东东,自己琢磨吧, 我觉得,就是从2.x到3.x的改变, 要重新整理这个类结构了,所以我在测试这个的时候好痛苦的啊。。
二、操作使用 虽然,BUG有,但是它基本功能还是可以用的 1.头文件与命名空间: #include "cocos-ext.h" USING_NS_CC_EXT; 2.创建: > * create a edit box with size. * @return An autorelease pointer of EditBox,you don't need to release it only if you retain it again. */ static EditBox* create(const Size& size,Scale9Sprite* normalSprite,Scale9Sprite* pressedSprite = nullptr,Scale9Sprite* disabledSprite = nullptr); 它的各参数: ——size 文本框的大小 ——normalSprite 文本框正常的背景 ——pressedSprite 文本框被点击时的背景 ——disabledSprite 文本框不可用时的背景 > * create a edit box with size. * @return An autorelease pointer of EditBox,const std::string& pNormal9SpriteBg,TextureResType texType = TextureResType::LOCAL); 它的各参数: ——size 文本框的大小 ——pNormal9SpriteBg 背景图片位置 ——texType 不知道,也没查到...希望各位能帮我解答一下
3.默认文本 设置默认文本,不像CCTextFieldTTF,create时必须创建默认文本,这个如果需要需额外自己写set /* 默认字体相关 */ // 默认文本 setPlaceHolder("Name:"); // 字体 setPlaceholderFontName("Arial"); // 颜色 setPlaceholderFontColor(Color3B::BLUE); // 大小 setPlaceholderFontSize(48); 顺便文本的也一样 setFontName("Marker Felt"); setFontColor(Color3B::RED); setFontSize(24); 4.其他一些操作 > 最大输入限制 setMaxLength(n); 这个我没有测试过去,在官方API上说:
就是说,可以设置文本框最大文本长度,如果设置这个就等同于开启了多行输入, 但是我这里无法限制长度,而且多行输入也没被打开。。。
>是否可见 setVisible(true/false); >设置输入文本的显示模式
>设置可输入文本类型
>设置返回时的类型
DEFAULT —— 默认类型 DONE —— "确定" SEND —— "发送" SEARCH —— "搜索" GO —— "连接"
5. 对于它的委托类 如果创建一个类,想用 CREATE_FUNC 必须要设置它委托类的一些虚函数才可以 —四大金刚— //开始编辑时 virtual void editBoxEditingDidBegin(EditBox* editBox); //结束编辑时 virtual void editBoxEditingDidEnd(EditBox* editBox); //编辑框文字改变时 virtual void editBoxTextChanged(EditBox* editBox,const std::string& text); //触发返回后 virtual void editBoxReturn(EditBox* editBox); 还有其他的一些东西,查一查API吧~
三、Do it 还是惯例,实践环节,创建一个 editbox ,设置它的默认字体 与 文本的颜色等 // 屏幕大小 Size visibleSize = Director::getInstance()->getVisibleSize(); // 编辑框大小 Size boxSize = CCSizeMake(400,200); Size boxSize2 = CCSizeMake(400,100); EditBox* editBox = EditBox::create(boxSize,"green.png"); editBox->setPosition(Vec2(visibleSize.width/2,visibleSize.height/2)); // 默认字体相关 editBox->setPlaceHolder("Name:"); editBox->setPlaceholderFontName("Arial"); editBox->setPlaceholderFontColor(Color3B::BLUE); editBox->setPlaceholderFontSize(32); // 编辑框文本相关 editBox->setFontName("Arial"); editBox->setFontColor(Color3B::RED); editBox->setFontSize(24); this->addChild(editBox); EditBox* editBox2 = EditBox::create(boxSize2,"yellow.jpg"); editBox2->setPosition(Vec2(visibleSize.width/2,visibleSize.height/4)); editBox2->setPlaceHolder("Password:"); editBox2->setFontName("Arial"); editBox2->setPlaceholderFontSize(24); editBox2->setFontSize(48); editBox2->setInputFlag(EditBox::InputFlag::PASSWORD); this->addChild(editBox2); 运行图片:
可以发现,我们设置的默认字体大小功能没有起作用。。。 好痛苦,做这个各种郁闷,资料少,麻烦多。。。 如果本篇文章有任何错误,敬请指正
******************************************** (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |