cocos2dx学习之路(六)

游戏中常见的文本框
聊天的文本框,角色建立时取名的文本框。
特点:可以接收用户的输入内容并显示出来。
Label只能显示,而文本框可以接收用户输入并显示。
游戏中实现让参与玩家输入昵称。
TextFiled类:
1、接收用户输入,限制输入字符长度
2、显示用户输入
自动换行、设置最大显示长度。
隐藏密码显示
3、处理用户焦点、点击、触摸等事件
TextFieldDemo.h

#pragma once
#include "cocos2d.h"
USING_NS_CC;
#include"ui/CocosGUI.h"
using namespace ui;
class TextFieldScene:public Scene
{
	public:
		CREATE_FUNC(TextFieldScene);
		virtual bool init();
}

TextFieldDemo.cpp

bool TextFieldScene::init()
{
	if(!Scene::init())return false;
	//添加一个背景图片
	Sprite*bg = Sprite::create("bg/bg_02.jpg");
	this->addChild(bg);
	//设置坐标位置
	bg->setAnchorPoint(Vec2::ANCHOR_MIDDLE);
	bg->setPosition(Vec2(Director::getInstance()->getVisibleSize() / 2));


	//实现一个文本框示例
	TexField* input = TexField::create();
	this->addChild(input);
	
	//设置坐标位置
	input->setAnchorPoint(Vec2::ANCHOR_MIDDLE);
	input->setPosition(Vec2(Director::getInstance()->getVisibleSize() / 2));
	
	//设置字体
	input->setFontName("arial");
	input->setFontSize(36);
	input->setColor(Color3B::WHITE);
	
	//默认显示文字内容,默认为灰色
	input->setPlaceHolder("Hello,World");

	//自动换行。忽略文本内容自适应长度设置为false表示不会随文本长度变化
	input->ignoreContentAdaptWithSize(false);
	input->setTextAreaSize(Size(300,100));

	//限制输入显示的长度
	input->setMaxLengthEnabled(true); 
	//这里的长度表示的个数,而不是字节,无论字母还是汉字都是3个
	input->setMaxLength(3);

	//添加文本框点击事件监听器
	input->addClickEventListener([&](Ref* ref)
	{
		//清空文本框显示内容
		//dynamic_cast<TextField*>(ref)->setString("");
	});
	//添加一个事件监听器
	input->addEventListener([&](Ref*ref,ui::TextField::EventType type)
	{
		if(type == ui::TextField::EventType::INSERT_TEXT)
		{
		auto input = dynamic_cast<TextField*>(ref);
			std::string content = input ->getString();
			for(char c : content)
			{	
				//如果输入的是中文,清空内容,并提示输入英文和数字
				if(c > 127 || c<=0)
				{
					input ->setString("");
					log("Please input letters and numbers");
					break;
				}
			}
		}
	});
	return true;
}

输入更改昵称
输入昵称再文本框中显示,要求:
1、第一次系统给出默认昵称
2、点击文本框旧的昵称清空
3、输入新的昵称,文本框显示新的昵称

TextFieldDemo.cpp

bool TextFieldScene::init()
{
	if(!Scene::init())return false;
	//实现一个文本框示例
	TexField* input = TexField::create();
	this->addChild(input);
	
	//设置坐标位置
	input->setAnchorPoint(Vec2::ANCHOR_MIDDLE);
	input->setPosition(Vec2(Director::getInstance()->getVisibleSize() / 2) + Vec2(0,-6));
	
	//设置字体
	input->setFontName("arial");
	input->setFontSize(18);
	input->setColor(Color3B::WHITE);
	
	//默认显示文字内容,默认为灰色
	input->setPlaceHolder("Please input a new name!");
	//给一个默认的名称
	auto data = FileUtils::getInstance()->getValueMapFromFile("res/tips.plist");
	std::map<std::string,Value>config;
	for(auto valPair : data)
	{
			 			config.insert(std::pair<std::string,Value>(valPair.first,valPair.second));
	}
	if(!config.empty())
	{
	//1002是plist(XML文件)中的键
		input->setString(config.at("1003").asString);
	}
	//自动换行。忽略文本内容自适应长度设置为false表示不会随文本长度变化
	input->ignoreContentAdaptWithSize(false);
	input->setTextAreaSize(Size(100,28));

	//限制输入显示的长度
	input->setMaxLengthEnabled(true); 
	//这里的长度表示的个数,而不是字节,无论字母还是汉字都是5个
	input->setMaxLength(5);

	//添加文本框点击事件监听器
	input->addClickEventListener([&](Ref* ref)
	{
		//清空文本框显示内容
		dynamic_cast<TextField*>(ref)->setString("");
	});
	return true;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恒德久远

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值