Cocos2d-x 3.4 之 文本输入 <1>

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

本文主要讲述文本输入的东东。

这个的作用就不用多说,还是很重要的,

cocos2d-x 引擎对于文本输入 有两个类可以实现,

一个是 —— CCTextFieldTTF

另一个是 —— CCEditBox

本文就主要说一下 第一个 CCTextFieldTTF,在 文本输入<2> 的时候再说 CCEditBox。

一、简介

这个类,在3.4 API 中的继承图是酱紫的:

可以看到,这个类继承自 Label 和 IMEDelegate(为子类提供虚拟键盘功能),

所以也有种说法,它就是个通过监听输入的字符而时时更新的Label而已。

二、相关操作

1. 创建

要注意,这里的创建并不是用 create了,但有两种方式

第一种,就是这样的,自己定义文本框大小、对齐方式

/** creates a TextFieldTTF from a fontname, alignment, dimension and font size */
    static TextFieldTTF * textFieldWithPlaceHolder(const std::string& placeholder, const Size& dimensions, TextHAlignment alignment, const std::string& fontName, float fontSize);

参数分别是:

placeholder  文本框默认内容(没有字符的时候的内容)

dimensions  文本框大小

alignment    文本框内容对齐方式

fontName    文本框采用的字体

fontSize      文本框字体大小

PS:关于 TextHAlignment 有

enum class CC_DLL TextHAlignment
{
    LEFT,
    CENTER,
    RIGHT
};

第二种就是,只定义字体种类、大小 和 默认内容,大小等于Label大小,如果内容超过编辑框大小会自动扩展:

/** creates a TextFieldTTF from a fontname and font size */
static TextFieldTTF * textFieldWithPlaceHolder(const std::string& placeholder, const std::string& fontName, float fontSize);

参数和上面的意义一样,就不写了。

2.其他操作

<1> 设置文本框默认内容,默认内容的字体颜色

// 设置/获取 文本框默认内容
virtual void setPlaceHolder(const std::string& text);
virtual const std::string& getPlaceHolder() const;
// 设置/获取 文本框默认内容颜色
virtual const Color4B& getColorSpaceHolder();

virtual void setColorSpaceHolder(const Color3B& color);
virtual void setColorSpaceHolder(const Color4B& color);

<2>  编辑框内容

// 设置/获取 编辑框内容
virtual void setString(const std::string& text) override;
virtual const std::string& getString() const override;
// 设置 编辑框内容颜色
virtual void setTextColor(const Color4B& textColor) override;

<3> 虚拟键盘

//开启虚拟键盘
virtual bool attachWithIME();
//关闭虚拟键盘
virtual bool detachWithIME(); 

<4> 密码

// 如果输入的是密码,让输入的东西全是 * ,一个字母是一个*,一个汉字是3个*
textEdit->setSecureTextEntry(true);

<5> 字符个数

// 获取 文本框内容字符个数
inline int getCharCount() const { return _charCount; };

至于其他的一些操作,自行看API吧...

这里就不再赘述

三、Do it

现在来一个小例子,展现一下吧

创建文本框

// 创建文本框1
textEdit = CCTextFieldTTF::textFieldWithPlaceHolder("Please input:","Arial", 36);
textEdit->setPosition(Vec2(visibleSize.width/2, visibleSize.height/2));
textEdit->setColorSpaceHolder(Color3B::BLUE);
this->addChild(textEdit);  

设置4个按钮,对文本框进行操作:

// 文字按钮——密码 模式
auto btn_psw = MenuItemFont::create("password",CC_CALLBACK_1(TextInput::menupswCallback,this));
btn_psw->setPosition(Vec2(btn_psw->getContentSize().width,visibleSize.height/4)); 

// 文字按钮——展示 文本框内容
auto btn_show = MenuItemFont::create("show",CC_CALLBACK_1(TextInput::menushowCallback,this));
btn_show->setPosition(Vec2(btn_psw->getContentSize().width*2,visibleSize.height/4));

// 文字按钮——计算文本框内字符个数
auto btn_count = MenuItemFont::create("count",CC_CALLBACK_1(TextInput::menucountCallback,this));
btn_count->setPosition(Vec2(btn_psw->getContentSize().width,visibleSize.height/6));

// 文字按钮——改变文本框内字体颜色
auto btn_color = MenuItemFont::create("color",CC_CALLBACK_1(TextInput::menuchangeColorCallback,this));
btn_color->setPosition(Vec2(btn_psw->getContentSize().width*2,visibleSize.height/6));

相应函数的设定:

// 触摸事件
bool TextInput::onTouchBegan(CCTouch* touch, CCEvent* ev)
{
    //用于判断是否点中了控件
    bool isClicked = textEdit->boundingBox().containsPoint(touch->getLocation());  

    //如果点中了控件
	if( isClicked )
    {
        //弹出软键盘
        textEdit->attachWithIME();
    }
	else
	{
		textEdit->detachWithIME();
	}

    //表示接受触摸消息
    return true;
} 

// 是否设置成 密码 模式
void TextInput::menupswCallback(cocos2d::Ref* pSender)
{
	if( textEdit->isSecureTextEntry() )
	{
		textEdit->setSecureTextEntry(false);
	}
	else
	{
		textEdit->setSecureTextEntry(true);
	}
}

// 展示文本框内容
void TextInput::menushowCallback(cocos2d::Ref* pSender)
{
	auto label = (Label*) this->getChildByTag(111);
	label->setString(textEdit->getString());
}

// 计算文本框内容字符个数
void TextInput::menucountCallback(cocos2d::Ref* pSender)
{
	auto label = (Label*) this->getChildByTag(112);
	label->setString( StringUtils::format(" %d ",textEdit->getCharCount()) );
}

// 改变文本框字体颜色
void TextInput::menuchangeColorCallback(cocos2d::Ref* pSender)
{
	textEdit->setColor(Color3B::GREEN);
}

Ok,运行一下(界面有点渣呀。。小测试,不要在意这些细节。。)

关于CCTextFieldTTF 就到这里了,

测试小例子的全部内容并非只有这些。。

有些内容没有写出来,

完整版测试内容  ->  
这里

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

时间: 2024-10-12 12:41:23

Cocos2d-x 3.4 之 文本输入 <1>的相关文章

iOS9使用提示框进行文本输入的正确实现方式

我在之前写过一篇博客<iOS9使用提示框的正确实现方式>,主要讲了如何使用UIAlertController替换UIAlertView进行提示框的实现.今天我们将会来实现一下在提示框中如何进行文本输入.该功能可以让用户进行密码确认等功能. 实现代码如下: #import "SecondViewController.h" #import "AppDelegate.h" @interface SecondViewController () @end @imp

设置警告框样式为带有两个文本输入的警告框,用于收集用户收货地址和联系电话。并选择合适的代理方法,当警告框上的两输入框有一个为空时限制“购买”按钮点击。

收集购物信息  iOS项目 倒计时:588 步骤 /.panel-heading 项目需求 设置警告框样式为带有两个文本输入的警告框,用于收集用户收货地址和联系电话.并选择合适的代理方法,当警告框上的两输入框有一个为空时限制“购买”按钮点击. #import "TableViewController.h" @interface TableViewController ()<UIAlertViewDelegate> @property (nonatomic, strong)

Cocos2d-x 3.4 之 文本输入之 EditBox

***************************************转载请注明出处:http://blog.csdn.net/lttree******************************************** 上一篇,说了 文本输入的 CCTextFieldTTF, 这次继续来弄文本输入,EditBox 做完CCTextFieldTTF以后,马上就搞这个EditBox了, 但是,改动有些多,而且好多BUG啊,网上资料也不多,整的我焦头烂额... 先发一些基础的,具体其

【cocos2d-x学习笔记】文本输入、菜单、内存管理、定时器

文本输入 CCTextFiledTTF CCTextFiledTTF *textEdit = CCTextFiledTTF::textFiledWithPlaceHolder("input", "Arial", 33); textEdit->atchWithIME();      弹出软键盘 textEdit->setSecureTextEntry(true);  密码格式输入 CCEditBox CCScale9Sprite *bg = CCScale

文本输入

1.隐藏文本框的键盘,Return类型设为UIReturnKeyDone,代理方法textD\FieldShouldReturn,视图控制器可以强令键盘留在键盘上,重写disablesAutomaticKeyBoardDismissal 2.UITextInputTraints协议中的属性:autocapitalizationType文本的自动大写,autocorrectionType自动修正,spellCheckingType是否进行拼写检查,keyboardAppearance键盘风格,ke

Java Swing界面编程(17)---单行文本输入组件:JTextField

package com.beyole.util; import java.awt.GridLayout; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextField; public class test15 { public static void main(String[] args) { JFrame frame = new JFrame("Crystal");// 实例化窗

Java Swing界面编程(18)---单行文本输入组件:JTextField

以下的程序与上一例有一点区别,仔细对比不难发现其中的不同之处. package com.beyole.util; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextField; public class test17 { public static void main(String[] args) { JFrame frame = new JFrame("Crystal"); JT

Android Design新控件之TextInputLayout(文本输入布局)

谷歌在推出Android5.0的同时推出了全新的设计Material Design,谷歌为了给我们提供更加规范的MD设计风格的控件,在2015年IO大会上推出了Design支持包,Design常用的新控件包括: TextInputLayout(文本输入布局) TabLaout(选项卡布局) Snackbar FloatingActionButton(浮动按钮) NavigationView(导航视图) AppBarLayout(程序栏布局) CoordinatorLayout(协作布局) Col

iOS【textView或者textField文本输入字数限制】

[textView文本输入 字数限制] // 监听文本改变  触发时机(通过发送通知完成) -(void)textViewEditChanged:(NSNotification *)obj{ UITextView *textView = (UITextView *)obj.object; NSAttributedString *toBeString = textView.attributedText; //    NSLog(@" - -%@",[_contentView.textIn