关于cocos2dx的textfield事件响应
time:2015/08/27
1. textfiled
cocostudio的输入框,看源代码知道他是直接继承widget的,但是真正的输入框功能是label实现的,是Textfield类的一个成员变量
2. addEventListener
注册函数对应的四个事件类型
(1)attach_with_ime
焦点进入
(2)detach_with_ime
焦点离开
(3)insert_text
输入文字
(4)delete_backward
输出文字
3. 事件触发机制
(1)touch:包括attach和detach
bool TextField::onTouchBegan(Touch *touch, Event *unusedEvent)
{
bool pass = Widget::onTouchBegan(touch, unusedEvent);
if (_hitted)
{
_textFieldRenderer->attachWithIME();
} else {
this->didNotSelectSelf();
}
return pass;
}
* 点击输入框其实就是触摸事件,然后判断当前焦点状态,做出进入还是离开的事件触发
(2)insert和delete
void TextFieldTTF::insertText(const char * text, size_t len);
void TextFieldTTF::deleteBackward();
* 直接从glfw触发调用到这两个函数
(3)流程图

(4)问题
*描述: attach响应之后detach也会响应一次
*解决:修改update函数,参考cocos2dx-3.6
修改之前代码:
void TextField::update(float dt)
{
if (getAttachWithIME())
{
attachWithIMEEvent();
setAttachWithIME(false);
}
if (getDetachWithIME())
{
detachWithIMEEvent();
setDetachWithIME(false);
}
修改之后的代码:
void TextField::update(float dt)
{
if (getDetachWithIME())
{
detachWithIMEEvent();
setDetachWithIME(false);
} if (getAttachWithIME())
{
attachWithIMEEvent();
setAttachWithIME(false);
}
4. 总结
(1)认识了TextFieldTTF的事件响应
(2)在此基础上加光标等内容会更加得心应手
关于cocos2dx的textfield事件响应的更多相关文章
- Cocos2d-x中触摸事件
理解一个触摸事件可以从时间和空间两方面考虑. 1.触摸事件的时间方面 触摸事件的在时间方面,如下图所示,可以有不同的“按下”.“移动”和“抬起”等阶段,表示触摸是否刚刚开始.是否正在移动或处于静止状态 ...
- iOS事件响应链
首先,当发生事件响应时,必须知道由谁来响应事件.在IOS中,由响应者链来对事件进行响应,所有事件响应的类都是UIResponder的子类,响应者链是一个由不同对象组成的层次结构,其中的每个对象将依次获 ...
- 追踪app崩溃率、事件响应链、Run Loop、线程和进程、数据表的优化、动画库、Restful架构、SDWebImage的原理
1.如何追踪app崩溃率,如何解决线上闪退 当 iOS设备上的App应用闪退时,操作系统会生成一个crash日志,保存在设备上.crash日志上有很多有用的信息,比如每个正在执行线程的完整堆栈 跟踪信 ...
- DuiLib事件分析(一)——鼠标事件响应
最近在处理DuiLib中自定义列表行元素事件,因为处理方案得不到较好的效果,于是只好一层一层的去剥离DuiLib事件是怎么来的,看能否在某一层截取消息,自己重写. 我这里使用CListContaine ...
- mvc ajax dropdownlist onchang事件响应
<script type="text/javascript"> $("#Cycle").on("change", functio ...
- Legolas工业自动化平台入门(三)交互事件响应动作
在上一篇Legolas工业自动化平台入门(二)数据响应动作 一文中,我们介绍了"动作"相关内容,了解到"动作"分为多种,各种动作的添加方式相同,但是应用方式各自 ...
- JS代码的位置与事件响应代码块的封装问题
JS代码的位置 我们可以将JavaScript代码放在html文件中任何位置,但是我们一般放在网页的head或者body部分. 放在<head>部分最常用的方式是在页面中h ...
- Android MotionEvent事件响应机制
在android中,事件主要包括点击.长按.拖曳.滑动等操作,这些构成了Android的事件响应,总体来说,所有的事件都由如下三个部分作为基础构成: 按下(action_down),移动(action ...
- 浅谈JavaScript的事件响应
原文出处: Christian Heilmann 译文出处:Chajn Science 每当猴子们问我JavaScript和DOM里啥东西最牛逼时,我都会一巴掌打回去:卧槽还用问么当然是事件响应了 ...
随机推荐
- filebeat output redis 报错 i/o timeout
filebeat output redis 报错 i/o timeout 先把报错内容贴出来. ERROR redis/client. go: Failed to RPUSH to redis li ...
- MySQL查询表结构的SQL语句
desc 数据库.表名; eg: desc mysql.user;
- boost::asio基本使用
一.Asio网络库 截止到C++17,C++标准库都没有加入网络通信库.实际项目网络编程是非常常见的功能,直接使用操作系统API是低效率且不稳定的,比较好的方法是借助第三方成熟可靠的网络库.据我所知C ...
- 解决火狐浏览器安装不上Selenium IDE插件“此附加组件无法安装”
(摘自http://blog.sina.com.cn/s/blog_14eea47cb0102w25n.html) 解决火狐浏览器安装不上Selenium IDE插件“此附加组件无法安装” 1.打开火 ...
- [IMX6]Android6.0移植和分析
0. 知识点 中断(设备树) [IMX6]设备树分析--dts 1. 编译 Android6.0内核移植(1):分析编译日志 Android6.0内核移植(2):kernel编译内核 单独烧录kern ...
- Ubuntu18---VMware虚拟机中Ubuntu18.04系统,开机输入密码后无响应黑屏
系统崩坏了,重装过几次,这次决定不充装了. 搜索大神解决方案后,了解到是图形界面程序损坏,可能是在更新内核或者安装软件的时候,把与xorg相关的文件给清除了. 解决方案如下: 1.登录系统进入,黑屏后 ...
- vue-webpack 做出来的项目部署到服务器上,点开是空白页(我这里把项目发布到git上)
总结1: 从网上下的很多demo,用npm run dev 就可以启动项目,比如:vue-cli,为什么?因为vue-cli自动帮我们安装了express服务器. 总结2: npm run dev 是 ...
- Message小结(二)
当客户端调用一个WCF接口时,客户端将请求消息发送到服务端,服务端再返回回复消息.WCF内部实现了消息处理的所有细节,但是并不意味着一切不可更改.WCF也提供了一些方法让开发人员在消息发送前对消息进行 ...
- fzu 2132 LQX的作业
Problem 2132 LQX的作业 Accept: 67 Submit: 150Time Limit: 1000 mSec Memory Limit : 32768 KB Proble ...
- IntelliJ IDEA 使用经验总结
一. 准备工作 1. 点击此下载 IntelliJ IDEA 开发工具 二. 注册 1. 修改 C:\Windows\System32\drivers\etc\hosts ,在末尾添加 0.0.0 ...