***************************************转载请注明出处: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);
运行图片:
可以发现,我们设置的默认字体大小功能没有起作用。。。
好痛苦,做这个各种郁闷,资料少,麻烦多。。。
********************************************