DisplayObject - bobby169/createjsDoc GitHub Wiki

localToGlobal ( x y [pt] ) Point

将指定的X和Y坐标从该DisplayObject的坐标空间转换为全局(stage)坐标空间。例如,这可以用于将HTML标签放置在嵌套显示对象上的特定点上。返回一个具有x和y属性的点坐标,返回的坐标与stage坐标相关。

displayObject.x = 300;
displayObject.y = 200;
stage.addChild(displayObject);
var point = displayObject.localToGlobal(100, 100);
// Results in x=400, y=300

此示例即为把displayObject自身的坐标与全局坐标stage中某一坐标(x=100,y=100)进行转换,转换后的位置是相对于stage来说

globalToLocal ( x y [pt] ) Point

将指定的X和Y位置从全局(阶段)坐标空间转换为DisplayObject的坐标空间。例如,这可以用于确定显示对象中的当前鼠标位置。返回一个具有X和Y属性的点实例,这些属性与显示对象坐标空间中转换的位置相关。

displayObject.x = 300;
displayObject.y = 200;
stage.addChild(displayObject);
var point = displayObject.globalToLocal(100, 100); // 假设100,100为当前鼠标的坐标,则返回的是当前鼠标坐标相对于此displayObject的坐标
// Results in x=-200, y=-100

转换后的位置是相对于displayObject来说

localToLocal ( x y target [pt] ) Point

p.localToLocal = function(x, y, target) {
  pt = this.localToGlobal(x, y);
  return target.globalToLocal(pt.x, pt.y);
};

比如下面示例

var arm;

var game = new hb.Game({
  width:640,
  height:640,
  response:false//发现如果response就会出问题
},{
  create:function () {
    target = game.stage.addChild(new createjs.Shape());
    target.graphics.beginFill("red").drawCircle(0,0,45)
      .beginFill("white").drawCircle(0,0,30)
      .beginFill("red").drawCircle(0,0,15);
    target.x = 100;
    target.y = 180;

    arm = game.stage.addChild(new createjs.Shape());
    arm.graphics.beginFill("black").drawRect(-2,-2,100,4)
      .beginFill("blue").drawCircle(100,0,8);
    arm.x = 180;
    arm.y = 100;
  },
  update:function (g,e) {
    arm.rotation += 1;

    target.alpha = 0.2;
    //因为arm和target都是的父级都是game.stage,target要相对于平级的一个点做hitTest,所以用localToLocal方法
   
    var pt = arm.localToLocal(100,0,target);

    //始终记住hitTest(localX,localY)中的参数必须为local坐标
    if (target.hitTest(pt.x, pt.y)) { target.alpha = 1; }
  }
})