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;
        }
    }
}

 

posted on 2018-02-01 13:58  被遗忘的优雅  阅读(6062)  评论(0编辑  收藏  举报