phaser游戏框架的sprite和group等游戏元素类都有pivot属性,官方的解释是使游戏元素围绕某个点旋转【注:The pivot point of the displayObject that it rotates around】,其实也可以作为元素缩放时候的原点。
可点击查看 演示例子
- 假设矩形的位置坐标为
(100,100), 这时的pivot值是(0,0)。 - 当
pivot=(150,150)时,则矩形的本地坐标系的原点的值将变成(150,150),由于(150,150)只是矩形的中心点,所以矩形需要进行相应的平移到本地坐标系的(0,0)点上,该点也为世界坐标系(-50,-50)的点。 - 之后进行的旋转和缩放都会以本地坐标系的原点即
(150,150)进行。
总结起来就是设置元素的pivot点后,元素会以pivot点为原点平移到元素的起始位置上。
元素的另外一个属性anchor也能实现类似pivot的功能,但他不会改变元素的坐标系,而只是在渲染时相应更改元素位置。且anchor的值范围为[0,1],作用是用来确定元素的起始原点。
由于设置pivot值会改变元素的默认位置,那么设置元素位置时需要进行额外计算,可参考以下方式:
function setSpritePosWithPivot(sprite,posx, posy){
sprite.position.set(posx + sprite.pivot.x, posy + sprite.pivot.y);
}
若元素设置了pivot值,要获取元素的旋转原点的世界坐标可以使用此方法
sprite.toGlobal(sprite.pivot)