您的位置:首页 > 其它

白鹭引擎 - 本地坐标和舞台坐标的转化 ( globalToLocal, localToGlobal )

2018-02-01 13:58 561 查看
class Main extends egret.DisplayObjectContainer {

/**
* Main 类构造器, 初始化的时候自动执行, ( 子类的构造函数必须调用父类的构造函数 super )
* constructor 是类的构造函数, 类在实例化的时候调用
* egret.Event.ADDED_TO_STAGE, 在将显示对象添加到舞台显示列表时调度
*/
public constructor(){
super();
this.addEventListener(egret.Event.ADDED_TO_STAGE, this.onAddToStage, this);
}

/**
* 本地坐标与显示坐标的转换, 默认情况下, 显示对象的 x 和 y 都是些相对父显示对象的
* 如果要让显示对象相对于其他显示对象, 如主屏幕, 可以利用坐标的转化
* 显示对象.globalToLocal(x, y) 将舞台坐标转化为该显示对象内部本地坐标 ( 常用 )
* 显示对象.localToGlobal(x, y) 将本地坐标转化为该现实对象所在舞台坐标 ( 不常用 )
*/
private onAddToStage(event:egret.Event){

// 创建一个空的 DisplayObjectContainer,把它的 x 和 y 坐标都改为
var container: egret.DisplayObjectContainer = new egret.DisplayObjectContainer();
container.x = 200;
container.y = 200;
this.addChild(container);

// 画一个红色的圆,添加到 container 中
var circle: egret.Shape = new egret.Shape();
circle.graphics.beginFill(0xff0000);
circle.graphics.drawCircle(25,25,25);
circle.graphics.endFill();
container.addChild(circle);

// 给圆增加点击事件 egret.TouchEvent.TOUCH_TAP, 事件类型只能用白鹭提供的
circle.touchEnabled = true;
circle.addEventListener(egret.TouchEvent.TOUCH_TAP, onClick, this);
function onClick():void{

// 把舞台左上角的坐标(0,0)转换为 container 内部的坐标
// egret.Point 坐标类, 两个属性 x 和 y , 对应横纵坐标
var targetPoint: egret.Point = container.globalToLocal(0,0);

// 重新定位圆,可以看到圆形移到了屏幕的左上角
circle.x = targetPoint.x;
circle.y = targetPoint.y;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: