cocos2d-x CCEditBox使用陷阱
2013-10-17 01:03
411 查看
严格说来,这个不能算cocos2d-x CCEditBox的bug。但是使用时不注意,确实会被一些恶心的问题纠结掉。
CCEditBox的原理是结合系统原生控件和cocos2d-x自带的CCLabelTTF,实现输入和显示效率的完美结合。需要输入的时候显示的是系统控件,可以兼容各种输入法,平常显示时使用的是CCLabelTTF。
我在测试的时候,发现iOS版本CCEditBox使用时,弹出输入框无法显示系统原生控件。按理说,控件的功能应该是正常的,那么就肯定是使用时有哪里使用错了。
经过将近一个小时的debug,发现是我自己的一套ui系统使用了非(0, 0)的锚点,但是CCEditBox在更新系统控件坐标的时候又不支持锚点计算。所以导致计算的坐标是错误的,于是无论怎样都无法显示出来。
CCEditBox在使用时需要注意:1、它的坐标更新是依赖于父窗口的,所以如果父窗口要有什么移动动画就需要注意在动画播放结束更新下CCEditBox的坐标。
2、所有包含CCEditBox的ui都不能使用非(0, 0)的锚点。 这个也是cocos2d默认在CCLayer和CCScene关闭锚点的原因。如果使用了锚点,那么在子控件计算全屏坐标时就无法取到正确的结果。
最后吐槽下cocos2d的这套坐标系统。看着花哨,用着不爽,我想获取一个实际屏幕显示坐标都非常麻烦。各种节点的嵌套关系再加上锚点,完全是一团乱麻。虽然完全理解后,所有的操作都是可行的,而且不是困难的。但是如果你真的完全理解了它的坐标系的话,那么你就不是一个菜鸟程序员了,而是一个熟悉cocos2d的高级程序员了。
CCEditBox的原理是结合系统原生控件和cocos2d-x自带的CCLabelTTF,实现输入和显示效率的完美结合。需要输入的时候显示的是系统控件,可以兼容各种输入法,平常显示时使用的是CCLabelTTF。
我在测试的时候,发现iOS版本CCEditBox使用时,弹出输入框无法显示系统原生控件。按理说,控件的功能应该是正常的,那么就肯定是使用时有哪里使用错了。
经过将近一个小时的debug,发现是我自己的一套ui系统使用了非(0, 0)的锚点,但是CCEditBox在更新系统控件坐标的时候又不支持锚点计算。所以导致计算的坐标是错误的,于是无论怎样都无法显示出来。
CCEditBox在使用时需要注意:1、它的坐标更新是依赖于父窗口的,所以如果父窗口要有什么移动动画就需要注意在动画播放结束更新下CCEditBox的坐标。
2、所有包含CCEditBox的ui都不能使用非(0, 0)的锚点。 这个也是cocos2d默认在CCLayer和CCScene关闭锚点的原因。如果使用了锚点,那么在子控件计算全屏坐标时就无法取到正确的结果。
最后吐槽下cocos2d的这套坐标系统。看着花哨,用着不爽,我想获取一个实际屏幕显示坐标都非常麻烦。各种节点的嵌套关系再加上锚点,完全是一团乱麻。虽然完全理解后,所有的操作都是可行的,而且不是困难的。但是如果你真的完全理解了它的坐标系的话,那么你就不是一个菜鸟程序员了,而是一个熟悉cocos2d的高级程序员了。
相关文章推荐
- cocos2d-x CCEditBox使用陷阱
- cocos2d-x CCEditBox使用陷阱
- cocos2d-x CCEditBox使用
- cocos2d-x CCEditBox 字符不能显示完全的bug
- CCEditBox 使用问题
- cocos2d-x 常用代码、高频使用代码【CCLayer、CCEditBox编辑框、CCControlButton按钮、CCLabelTTF标签、CCSpriteBatchNode渲染、CCMen】
- cocos2d-x如何解决 CCEditBox在 安卓平台下面不响应touch的问题
- Cocos2d-x CCEditBox & CCTextFieldTTF
- 【cocos2d-x】关于cocos2d-x解析json的一个类,jsonbox的使用方法资料
- 7 cocos2d-x CCEditBox 编辑框
- cocos2d-x 有关CCEditBox设置除输入框以外的可点击触发区域
- Cocos2d-x中CCEditBox文本输入框的使用实例
- Cocos2d-x学习笔记(11)(CCEditBox编辑框)
- Cocos2d-x CCEditBox & CCTextFieldTTF
- cocos2d-x CCEditBox 字符不能显示完全的bug
- (译)如何优化cocos2d程序的内存使用和程序大小:第一部分
- cocos2d-x 3.1.1 step by step 学习笔记4 标签使用
- Cocos2d-X Scrollview与CCMenu的结合使用在屏幕滑动实例
- 使用 VirtualBox + Vagrant + 宝塔 Linux 面板搭建本地虚拟开发环境
- cocos2d-x2.2.2版本+CocoStudio1.20使用问题