cocos2d-x CCEditBox使用陷阱

        严格说来,这个不能算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的高级程序员了。

你可能感兴趣的:(cocos2d-x CCEditBox使用陷阱)