cocostudio的TextField空件实现光标。
- cocostudio3.10 已经帮我们做好了TextField控件,提供了触摸事件和一些常用API,已经不用向原来自己写一个TextFied了,但是还没有实现光标,下面我们在这个控件的基础上面来加入光标的功能。
CursorTextField .h
#ifndef CursorTextField_h
#define CursorTextField_h
#include"cocos2d.h"
#include"cocostudio/CocoStudio.h"
#include"ui/CocosGUI.h"using namespace cocos2d;
using namespace ui;
using namespace cocostudio;class CursorTextField :public Node
{
public:CursorTextField();static Node* createWithTextField(TextField *text,const std::string &TTFpath,int fontSize);//static Node* createWithTextField(TextField *text);bool init(TextField *text, const std::string &TTFpath, int fontSize);void initTextField(TextField *text, const std::string &TTFpath, int fontSize);void purge();void addCursorSprite();void textFiledEvent(Ref *pSender, TextField::EventType type);int getContentWidth();
public:TextField* m_textField;std::string m_ttfPath;int m_FontSize;Sprite* m_cursorSprite;Action* m_cursorAction;
};
#endif
CursorTextField .cpp
#include"CursorTextField.h"
CursorTextField::CursorTextField()
{m_textField = NULL;m_cursorSprite = NULL;m_cursorAction = NULL;
}Node* CursorTextField::createWithTextField(TextField *text, const std::string &TTFpath, int fontSize)
{auto ref = new CursorTextField;if (ref &&ref->init(text, TTFpath, fontSize)){ref->autorelease();}else CC_SAFE_DELETE(ref);return ref;
}
bool CursorTextField::init(TextField *text, const std::string &TTFpath, int fontSize)
{initTextField(text, TTFpath, fontSize);addCursorSprite();m_textField->addEventListener(CC_CALLBACK_2(CursorTextField::textFiledEvent,this));return true;
}
void CursorTextField::initTextField(TextField *text, const std::string &TTFpath, int fontSize)
{m_textField = text;m_ttfPath = TTFpath;m_FontSize = fontSize;
}int CursorTextField::getContentWidth()
{auto label = Label::createWithTTF(m_textField->getString(), m_ttfPath, m_FontSize);auto width = label->getContentSize().width;return m_textField->getPosition().x+width;
}
void CursorTextField::textFiledEvent(Ref *pSender, TextField::EventType type)
{switch (type){case TextField::EventType::ATTACH_WITH_IME:{m_cursorSprite->setVisible(true);m_cursorSprite->setPositionX(getContentWidth());break;}case TextField::EventType::DETACH_WITH_IME:m_cursorSprite->setVisible(false);break;case TextField::EventType::INSERT_TEXT:{m_cursorSprite->setVisible(true);m_cursorSprite->setPositionX(getContentWidth());break;}case TextField::EventType::DELETE_BACKWARD:{m_cursorSprite->setVisible(true);m_cursorSprite->setPositionX(getContentWidth());break;}default:break;}
}
void CursorTextField::addCursorSprite()
{int column = 2;int height = 20;int pData[50][2];for (int i = 0; i < height; i++){for (int j = 0; j < column; j++){pData[i][j] = 0xffffffff;}}Texture2D* texture = new Texture2D();//指针,指针长度,像素类型,像素宽度,高度,内容大小texture->initWithData(pData, 20, Texture2D::PixelFormat::RGB888, 1, m_textField->getFontSize(),CCSizeMake(column, height));m_cursorSprite = Sprite::createWithTexture(texture);m_cursorSprite->setPositionY(m_textField->Node::getPositionY()+2);texture->autorelease();addChild(m_cursorSprite);m_cursorSprite->setVisible(false);m_cursorAction = RepeatForever::create(Sequence::create(FadeOut::create(0.7f), FadeIn::create(0.7f),NULL));m_cursorSprite->runAction(m_cursorAction);
}
使用:
//m_TextUsername是从Csb中得到的TextField控件。
//记住: 一定要将cocostudio中的TextField的字体大小和
//字体样式的设置和程序当中的label一样。我的代码已经处理过
//大家可以直接不管,直接使用。只是想提醒下这个细节。
m_TextUsernameField= CursorTextField::createWithTextField(m_TextUsername, "fonts/kaiti.ttf", m_TextUsername->getFontSize());addChild(m_TextUsernameField);
效果图
cocostudio的TextField空件实现光标。相关推荐
- vb6中使text控件的光标随着增加的内容向下移动
vb6中使text控件的光标随着增加的内容向下移动 Dim i As Integer Private Sub Command1_Click() Text1.Text = Text1.Text + &q ...
- 关于cocostudio动态添加控件触摸响应无效的学习
time:2015/04/19 1. 描述 * 把studio制作的ui加载之后,动态添加事件(比如说,单点触摸),结果回调函数(eg:onTouchBegan等)根本没有响应! * 另外,网上有朋友 ...
- c 语言如何隐藏光标,如何隐藏C#中textBox控件的光标
怎么隐藏C#中textBox控件的光标 using System.Runtime.InteropServices; -- [DllImport("user32", EntryPoi ...
- 远程桌面服务ActiveX空件(mstscax.dll)跟客服端外壳的版本不相配
远程桌面服务ActiveX空件(mstscax.dll)跟客服端外壳的版本不相配 浏览器重置好了
- QML自定义TextField控件
QML中QtQuick提供的文本编辑框控件包括 TextInput,TextField,TextEdit,TextArea.Textlnput 与 TextField 为行编辑控件,TextEdit ...
- jasper 中textfield控件的Markup属性用法
markup属性主要分为4个属性 none:不做任何处理,当作普通字符串展示 styled:样式化标记文本,系统会使用jasperreport的样式化标记文本的进行渲染 html:使用html标记语言 ...
- MFC隐藏EditControl控件的光标
1.解决思路:给控件添加事件处理程序,一旦出现显示光标这个事件,立刻使用HideCaret函数处理掉. 2.具体步骤: (1)右键控件,选择添加事件处理程序. (2)类列表选择主类,消息类型选择EN_ ...
- Android --- 怎么设置 EditText 控件中光标默认位置,当 EditText 里有文字的时候,光标跑到了最前面
问题描述 今天写 Android 项目的时候遇到这样一个问题,当我进入一个修改页面的时候,发现 EditText 下的光标在文字的最前面,这样给用户的体验感非常不好,所以用以下方法解决,简单明了. 解 ...
- IOS实现点击软键盘的Next/Return按钮或者空白处后自动隐藏键盘
在开发IOS过程中,经常需要用到TextField控件.光标一旦定位到该控件,软键盘就会自动开启,用户能够在其中通过软键盘进行输入.但是,若不对软键盘进行其他操作,它是不会自动关闭的.这样就很有可能降 ...
- Unity3D TextField 和 PasswordField控件(文本框)
TextField控件 TextField控件主要用于监听用户输入的信息,使用GUI.TextField()方法显示输入框,该方法的返回值为用户输入的字符串信息. 常见形式: GUI.TextFiel ...
最新文章
- 破解Win2008口令-ERD6.0
- 密码学中经典算法及应用
- hadoop hive hbase 集群搭建
- 2年Java面试提问总结
- 前端学习(1849)vue之电商管理系统电商系统前端项目初始化
- python 循环内部添加多个条件判断会出现越界
- 正则表达式 正整数_史上最全的正则表达式 (1) -- 校验数字的表达式
- 服务器网卡的Teaming技术
- AcWing 900. 整数划分(完全背包计数问题)
- PowerPhotos:Mac照片库管理软件
- 整理下OSS方面的资料,免得到处找,linux音频编程,open sound system
- 隐藏输入法图标的方法
- Vant删除图片Vue版本
- dsp调音一次多少钱_dsp价格一般多少
- Inventor冲压加强筋_Inventor教程:创建加强筋
- python输入hello*3_Python快速上手: hello world
- 现在是经济的寒冬吗?
- 【恋恋不忘你xp主题】_8.4
- onload、onunload、onbeforeunload的区别
- 珠海中级Java招聘 薪资16-20k