zoukankan      html  css  js  c++  java
  • 你的localToGlobal出错了吗?!

    在AS3 API手册的DisplayObject类中,对localToGlobal方法的解析没有问题,但在实际运用中,我们的面对情形有点变化。我们先看手册中举的例子:
    以下代码可创建一个 Sprite 对象。 该 Sprite 对象的 mouseX 和 mouseY 属性位于显示对象的坐标空间中。 此代码使用 localToGlobal() 方法将这些属性转换为全局(舞台)坐标:
    import flash.display.Sprite;
    import flash.events.MouseEvent;
    import flash.geom.Point;
    
    var square:Sprite = new Sprite();
    square.graphics.beginFill(0xFFCC00);
    square.graphics.drawRect(0, 0, 100, 100);
    square.x = 100;
    square.y = 200;
    
    addChild(square);
    
    square.addEventListener(MouseEvent.CLICK, traceCoordinates)
    
    function traceCoordinates(event:MouseEvent):void {
        var clickPoint:Point = new Point(square.mouseX, square.mouseY);
        trace("display object coordinates:", clickPoint);
        trace("stage coordinates:", square.localToGlobal(clickPoint));
    }
    这里舞台只添加了一个对象--square,它求鼠标点击点在stage中的坐标。但我们经常处理的是错综复杂的子对象与孙对象,如果square再添加一个子对象sun,变成:

    import flash.display.Sprite;
    import flash.events.MouseEvent;
    import flash.geom.Point;

    var square:Sprite = new Sprite();
    var son:Sprite = new Sprite();
    square.graphics.beginFill(0xFFCC00);
    square.graphics.drawRect(0, 0, 100, 100);
    square.x = 100;
    square.y = 200;
    son.graphics.beginFill(0xFF6600);
    son.graphics.drawCircle(5, 5, 50);
    son.x = 10;
    son.y = 20;

    square.addChild(son);
    addChild(square);

    son.addEventListener(MouseEvent.CLICK, traceCoordinates)

    function traceCoordinates(event:MouseEvent):void {
    var clickPoint:Point = new Point(son.x, son.y);
    trace("stage coordinates:", son.localToGlobal(clickPoint));
    }

    我想,
    son.localToGlobal(clickPoint)
    是很多人的习惯写法,头脑中直接认为,求son在stage的坐标,包括我。
    如果是这种写法的话得出的全局坐标点是错的,为什么?因为,这相当于是求一个在son中的点(x:10,y:20)在全局位置的坐标,son在square中的本地坐标转为stage中的坐标应该是:
    square.localToGlobal(clickPoint);
    因为son的注册点(x:10,y:20)是相对于square的,即是应用的点坐标系是父对象的。在son添加到父对象后也可这样写:

    parent.localToGlobal(clickPoint)

    应该再次记住的是,clickPoint是square或parent的坐标系,而非son的,但也并非说不能写成:
    son.localToGlobal(clickPoint)
    而是,这个意思变了。
  • 相关阅读:
    Java抓取网页数据(原网页+Javascript返回数据)
    jvm调优
    Windows系统下nodejs安装及配置
    《学习opencv》笔记——矩阵和图像操作——cvCalcCovarMatrix,cvCmp and cvCmpS
    数据结构与算法一
    Oracle Hints具体解释
    hibernate-4.3.5安装配置
    linux-多线程
    利用JasperReport+iReport进行Web报表开发
    linux下tar.xz 文件解压
  • 原文地址:https://www.cnblogs.com/sumsung753/p/3821501.html
Copyright © 2011-2022 走看看