easljs / Animate CC Canvas:可拖动蒙版

时间:2017-10-09 18:09:35

标签: canvas mask easeljs animate-cc

我想在Animate CC Canvas中制作一个可拖动的蒙版。

box是一个包含矢量黑色方块的movieClip。

bg是一个movieClip,其中包含一个位图,我想将该框作为蒙版应用并拖动。

两者都显示在屏幕上,但是dragBox只能拖动,但它不会屏蔽backgroundImage。我在这里缺少什么?

var backgroundImage = new lib.bg();
backgroundImage.x = backgroundImage.y = 0;
stage.addChild(backgroundImage);

var dragBox = new lib.box();
dragBox.x = dragBox.y = 0;
stage.addChild(dragBox);    

backgroundImage.mask = dragBox;
stage.update();    

dragBox.addEventListener("pressmove", dragMe.bind(this));
function dragMe(evt) {
    this.addChild(evt.currentTarget);
    var p = this.globalToLocal(evt.stageX, evt.stageY);
    evt.currentTarget.x = p.x;
    evt.currentTarget.y = p.y;
}

1 个答案:

答案 0 :(得分:1)

面具不应该是舞台上的孩子。将它添加到舞台使它既是面具,也是可见的孩子。

有两种简单的方法。

  1. 将可拖动的孩子放在内容后面。这使得它不可见,但由于图像没有任何鼠标交互,它将通过鼠标按下。唯一的副作用是,由于舞台儿童对面具的别名,你会得到一个可见的光环。
  2. 以下是一个快速示例: https://jsfiddle.net/lannymcnie/og4pmo73/

    1. 另一种选择是使用舞台事件,并将可拖动的孩子从舞台上取下。该阶段始终会调度stagemousedownstagemouseupstagemousemove个事件,因此您可以收听这些事件,并相应地处理它们。它不像pressmove事件一样干净,但它没有多少工作。
    2. 以下是一个快速示例: https://jsfiddle.net/lannymcnie/og4pmo73/1/

      var offset = new createjs.Point();
      var listener = null;
      stage.on("stagemousedown", function(e) {
          offset.setValues(s.x - e.stageX, s.y-e.stageY);
      
        listener = stage.on("stagemousemove", function(e) {
          s.x = e.stageX+offset.x; s.y = e.stageY+offset.y;
        });
      });
      stage.on("stagemouseup", function(e) {
        stage.off("stagemousemove", listener);
      });
      

      希望有所帮助!