改变相对于舞台的位置

 

一定要记住 xy 属性始终是指显示对象相对于其父显示对象坐标轴的 0,0 坐标的位置,这一点很重要。因此,对于包含在 Sprite 实例内的 Shape 实例(如圆),如果将 Shape 对象的 xy 属性设置为 0,则会将圆放在 Sprite 的左上角,该位置不一定是舞台的左上角。要确定对象相对于全局舞台坐标的位置,可以使用任何显示对象的 globalToLocal() 方法将坐标从局部(舞台)坐标转换为本地(显示对象容器)坐标,如下所示:

// 将形状定位到舞台左上角,
// 无论其父级位于什么位置。

// 创建 Sprite,确定的位置为 x:200 和 y:200。
var mySprite:Sprite = new Sprite();
mySprite.x = 200;
mySprite.y = 200;
this.addChild(mySprite);

// 在 Sprite 的 0,0 坐标处绘制一个点作为参考。
mySprite.graphics.lineStyle(1, 0x000000);
mySprite.graphics.beginFill(0x000000);
mySprite.graphics.moveTo(0, 0);
mySprite.graphics.lineTo(1, 0);
mySprite.graphics.lineTo(1, 1);
mySprite.graphics.lineTo(0, 1);
mySprite.graphics.endFill();

// 创建圆 Shape 实例。
var circle:Shape = new Shape();
mySprite.addChild(circle);

// 在 Shape 中绘制半径为 50 且中心点的 x 和 y 坐标均为 50 的圆。
circle.graphics.lineStyle(1, 0x000000);
circle.graphics.beginFill(0xff0000);
circle.graphics.drawCircle(50, 50, 50);
circle.graphics.endFill();

// 移动 Shape,使其左上角位于舞台的 0, 0 坐标处。
var stagePoint:Point = new Point(0, 0);
var targetPoint:Point = mySprite.globalToLocal(stagePoint);
circle.x = targetPoint.x;
circle.y = targetPoint.y;

同样,可以使用 DisplayObject 类的 localToGlobal() 方法将本地坐标转换为舞台坐标。

posted @ 2009-10-26 09:45  蓝魔  阅读(193)  评论(0)    收藏  举报