游戏中常见的文本框
聊天的文本框,角色建立时取名的文本框。
特点:可以接收用户的输入内容并显示出来。
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;
}