quick中的静态布局和动态展示

quick cocos2dx 的布局网络上有非常多的介绍,在此就不从头介绍了,不过有做动画的童鞋需要注意以下几点
1 对象的位置都是相对坐标
如图所示

这里有5个对象,其中
a的父结点是e a坐标为 0, 50
c的父结点是e c坐标为 30, 0
b的父结点是a b坐标为 20, 10
d的父结点是c d坐标为 20, 10
代码如下

local e = display.newLayer()
e:addTo(self)
local a = display.newLayer()
a:addTo(e)
a:aling(display.BOTTOM_LEFT, 0, 50)
local c = display.newLayer()
c:addTo(e)
c:aling(display.BOTTOM_LEFT, 50, 0)
local b = display.newLayer()
b:addTo(a)
b:aling(display.BOTTOM_LEFT, 20, 10)
local d = display.newLayer()
d:aling(display.BOTTOM_LEFT, 20, 10)
d:addTo(c)
print(d:getPositionX(), d:getPositionY())
print(b:getPositionX(), b:getPositionY())

此时打印出来的结果都是20,10,因为用的都是相对父结点的坐标

2 假设现在要把b移动到d的位置,得这样操作
1 取到它们拥有共同父结点的对象,在这里是,a和c
2 取a和c的相对父结点的坐标。
3 算出b和d 在 e 中的相对位置, 代码如下

local ex = c:getPositionX() + d:getPositionX()
local ey = c:getPositionY() + d:getPositionY()
b:runAction(cc.MoveTo:create(1, ccp(ex, ey))

如此这般,b就移动到d了,若是反过来的话一个道理,需要注意的是,这里的所有对象都使用了同一个锚点。
下面提供几个帮助转换的函数,相信看了以上的例子,下面的函数应该好理解了。
1 nodeParent:convertToWorldSpace(node:getPosition())
一定是父控件调用此函数,把子控件相对自己的坐标转换成相对屏幕的坐标
2 node2:convertToNodeSpace(node1:getPosition())
把node1的相对坐标转成相对node2的坐标
3 考虑锚点的情况
nodeParent:convertToWorldSpaceAR(node:getPosition())
node2:convertToNodeSpaceAR(node1:getPosition())

你可能感兴趣的:(位置)