相对位置
当你添加一个精灵到一个 Container
,它的 x
、y
位置是相对于这个组的左上角,这是精灵的 local position。
从下图中,你认为"支地鼠"的位置是多少?
console.log(aliMole.getPositionX());
//=> 0
0?是的!因为"支地鼠"的 x
值是相对于组 moles
的左上角,0 就是精灵的 local position。
如果我们想要获取精灵相对于画布的全局位置(global position)呢?就是相对于画布的左上角的位置。
你可以使用 toGlobal
方法:
parentSprite.toGlobal(childSprite.position);
这就意味这你可以找到 moles 组里的 aliMole 的全局位置:
console.log(moles.toGlobal(aliMole.getPosition()));
//=> {x: 40, y: 165}
如果我不知道精灵的父容器是什么,怎么办?每一个继承于 DisplayObject
的显示类都有 parent
属性,这会返回它的父对象,上面的代码中 aliMole
的 parent 就是 moles
,所以,你获取 aliMole
全局位置的姿势就可以是这样的:
aliMole.parent.toGlobal(aliMole.getPosition());
不过,你可以使用 getGlobalPosition
快速得到全局位置,这也是推荐的姿势:
// 支地鼠的全局位置
console.log(aliMole.getGlobalPosition());
//=> {x: 40, y: 165}
// 堵车鼠的全局位置
console.log(dcMole.getGlobalPosition());
//=> {x: 80, y: 205}
// 排队鼠的全局位置
console.log(pdMole.getGlobalPosition());
//=> {x: 120, y: 245}
Tips
- 获取全局位置后,对于检测碰撞会有很大的帮助。
你还可以使用 toLocal
方法来得到两个精灵之间的相对位置:
console.log(aliMole.toLocal(aliMole.position, dcMole));
//=> {x: 40, y: 40}
从上面的代码片段运行的结果可以看出:"支地鼠"和"堵车鼠"之间的偏移量是 {40, 40}。