Cocos2d-x 3.4 之 文本输入之 EditBox

前端之家收集整理的这篇文章主要介绍了Cocos2d-x 3.4 之 文本输入之 EditBox前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

***************************************转载请注明出处:http://blog.csdn.net/lttree********************************************@H_502_5@


@H_502_5@


@H_502_5@

上一篇,说了 文本输入的 CCTextFieldTTF,@H_502_5@

这次继续来弄文本输入,EditBox@H_502_5@


@H_502_5@

做完CCTextFieldTTF以后,马上就搞这个EditBox了,@H_502_5@

但是,改动有些多,而且好多BUG啊,网上资料也不多,整的我焦头烂额。。。@H_502_5@

先发一些基础的,具体其他功能,等它完善一些吧。。@H_502_5@


@H_502_5@


@H_502_5@


@H_502_5@

一、简介@H_502_5@

同CCTextFieldTTF一样,看一下 EditBox 的类继承图,@H_502_5@

这里说一下,网上的查到的都是下面这样的,到cocos2d-x 3.0 API为止(应该是中文最高版本),也是这样的@H_502_5@


@H_502_5@

就是说 EditBox类是由 ControlButton类和IMEDelegate类继承而来,@H_502_5@

在讨论 CCTextFieldTTF时就有说过,它就像 动态的Label,@H_502_5@

那这个,就是动态的Button了。@H_502_5@

————But@H_502_5@

在3.4 api中,它的类继承图改变了:@H_502_5@


@H_502_5@

IMEDelegate没变,这是输入法的代理类,但是另一个变成了 Widget 类,这个类查一查就可以发现,它:@H_502_5@


@H_502_5@

就列在这里,具体东东,自己琢磨吧,@H_502_5@

我觉得,就是从2.x到3.x的改变,@H_502_5@

要重新整理这个类结构了,所以我在测试这个的时候好痛苦的啊。。@H_502_5@


@H_502_5@


@H_502_5@


@H_502_5@

二、操作使用@H_502_5@

虽然,BUG有,但是它基本功能还是可以用的@H_502_5@

1.头文件与命名空间:@H_502_5@

#include "cocos-ext.h"
USING_NS_CC_EXT;

2.创建:@H_502_5@

>@H_502_5@

             * 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);


它的各参数:@H_502_5@

——size 文本框的大小@H_502_5@

——normalSprite 文本框正常的背景@H_502_5@

——pressedSprite 文本框被点击时的背景@H_502_5@

——disabledSprite 文本框不可用时的背景@H_502_5@

>@H_502_5@

             * create a edit Box with size.
             * @return An autorelease pointer of EditBox,const std::string& pNormal9SpriteBg,TextureResType texType = TextureResType::LOCAL);

它的各参数:

——size 文本框的大小@H_502_5@

——pNormal9SpriteBg 背景图片位置@H_502_5@

——texType 不知道,也没查到...希望各位能帮我解答一下@H_502_5@


@H_502_5@

3.默认文本@H_502_5@

设置默认文本,不像CCTextFieldTTF,create时必须创建默认文本,这个如果需要需额外自己写set@H_502_5@

/*     默认字体相关     */
// 默认文本
setPlaceHolder("Name:");
// 字体
setPlaceholderFontName("Arial");
// 颜色
setPlaceholderFontColor(Color3B::BLUE);
// 大小
setPlaceholderFontSize(48);

顺便文本的也一样
setFontName("Marker Felt");
setFontColor(Color3B::RED);
setFontSize(24);


4.其他一些操作@H_502_5@

> 最大输入限制@H_502_5@

setMaxLength(n);

这个我没有测试过去,在官方API上说:


@H_502_5@

就是说,可以设置文本框最大文本长度,如果设置这个就等同于开启了多行输入,@H_502_5@

但是我这里无法限制长度,而且多行输入也没被打开。。。@H_502_5@


@H_502_5@

>是否可见@H_502_5@

setVisible(true/false);


>设置输入文本的显示模式@H_502_5@


@H_502_5@


@H_502_5@

>设置可输入文本类型@H_502_5@


@H_502_5@


@H_502_5@

>设置返回时的类型@H_502_5@


@H_502_5@

DEFAULT —— 默认类型@H_502_5@

DONE —— "确定"@H_502_5@

SEND —— "发送"@H_502_5@

SEARCH —— "搜索"@H_502_5@

GO —— "连接"@H_502_5@


@H_502_5@

5. 对于它的委托类@H_502_5@

如果创建一个类,想用 CREATE_FUNC@H_502_5@

必须要设置它委托类的一些虚函数才可以@H_502_5@

四大金刚@H_502_5@

//开始编辑时
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吧~@H_502_5@


@H_502_5@


@H_502_5@


@H_502_5@

三、Do it@H_502_5@

还是惯例,实践环节,创建一个 editBox ,设置它的默认字体 与 文本的颜色等@H_502_5@

        // 屏幕大小
	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);

运行图片


@H_502_5@

可以发现,我们设置的默认字体大小功能没有起作用。。。@H_502_5@

好痛苦,做这个各种郁闷,资料少,麻烦多。。。@H_502_5@

如果本篇文章有任何错误,敬请指正@H_502_5@


@H_502_5@


@H_502_5@

******************************************** @H_502_5@

猜你在找的Cocos2d-x相关文章