cocos2d-x的UI控件相对布局后LayoutParameter会使Position定位无效的解决办法

如果要用代码控制一个在相对布局Panel里的UI控件的Position位置,那么只能用修改其LayoutParameter的方法才行,普通的setPosition()不起作用:

node:getLayoutParameter():setMargin({ left = 0,right = 0,top = 0,bottom = 0})

注意,必须是调用setMargin()方法才行,而像getMargin().left = 0这样的写法是不起作用的

修改LayoutParameter的margin虽然能够重新定位UI控件了,但如果要给这个UI控件的移动做一个动画的话还是不行,因为MoveTo Action的本质还是设置position值。解决办法只能是在Cocos Studio里将Panel设置为绝对定位而不是相对定位了。

工作流程是:

  1. 在Cocos Studio里创建相对定位的Panel和里面的UI控件
  2. 一切都定位好后,将上层Panel重新设置为绝对定位,此时里面的UI控件不会错乱,position数值会被Cocos Studio自动算好
  3. 在代码里对UI控件用setPosition()定位、用MoveTo做动画都没问题

之所以这么绕,是因为cocos2d-x动画的动作必须是事先指定好的(如MoveTo、ScaleBy等),而不像UIKit的[UIView animationWithDuration:...]方法那么聪明,能够自动识别所有绘画层的变化。

总结:相对定位的控件没法做基于Position位置的动画,必须改为绝对定位。在不用百分比做多分辨率适配的情况下,一般在Cocos Studio里先用相对定位设置好控件位置,再改回绝对定位也不会有什么问题。(我没试过如果用百分比做多分辨率适配再改回绝对定位会不会有问题。)

相关文章

    本文实践自 RayWenderlich、Ali Hafizji 的文章《...
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@1...
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从C...
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发...
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《...
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试...