如何调整Drag&的目标区域使用响应画布放入Animate CC

时间:2017-05-16 17:36:02

标签: javascript drag-and-drop html5-canvas easeljs animate-cc

我正在努力使拖拽更准确,而不仅仅是矩形和圆形,而且到目前为止似乎进展顺利。唯一的问题是目标区域与形状实际位置不匹配。

this演示中,我有一个主要工作,将拖动对象,它就越过掉落区域就好了。唯一的问题是掉落区域被转化为稍微高于掉落区域的东西(它应该是菜肴中的食物)。

正确的位置是让小费进入顶部。不正确的放置是将尖端粘在食物的一侧。

我认为它最终与交叉功能有关,但我不确定。

这是相关代码:

//dragger object
var dragger = this.thermometer;

//Correct and incorrect drop spaces.
var right = this.AreaCorrect;
var wrong = this.AreaWrong;

dragger.on("pressmove", function(evt){
    evt.currentTarget._goto(0);
    evt.currentTarget.x = evt.stageX;
    evt.currentTarget.y = evt.stageY;

    //can remove this whole thing in the final version
    if(intersect(evt.currentTarget.drag, right)){
        evt.currentTarget.alpha=.5;

    }else if(intersect(evt.currentTarget.drag, wrong)){
        evt.currentTarget.alpha=.2;

    }else{
        evt.currentTarget.alpha=1;
    }

    stage.update(evt);
}, this);

dragger.on("pressup", function(evt){
    //lock position of drag object and play animation if any
    dragger.x = dragger.x;
    dragger.y = dragger.y;

    //remove the alpha changes in final
    if(intersect(evt.currentTarget.drag, right)){
        dragger.mouseEnabled = false;
        dragger.play();
        exportRoot.fb_reading.gotoAndPlay(1);
        evt.currentTarget.alpha=1;

    }else if(intersect(evt.currentTarget.drag, wrong)){
        dragger.mouseEnabled = false;;
        dragger.play();
        exportRoot.fb_reading.gotoAndPlay(50);
        evt.currentTarget.alpha=1;
    }

    stage.update(evt);
}, this);

//returns true or false
function intersect(drag, target){
    var pt = drag.localToLocal(drag.x, drag.y, target);
    if(target.hitTest(pt.x, pt.y)){
        return true;
    }else{
        return false;
    }
}

此外,由于某种原因,有时(但并非总是如此),使用变换工具移动对象的锚点可以帮助移动目标区域。

我使用代码here从我之前使用的codepen更新交叉函数。

再次,演示链接:https://mhardingfoodsafe.github.io/dragndropNEW/

1 个答案:

答案 0 :(得分:0)

我认为这是最好的方法(我发现......)。我所做的是将按钮转换为动画片段,但是animateCC并没有完全转换它应该具有的效果。我不得不删除那些并制作一个新的动画片段,只有一个帧和一个区域应该是该区域。

从那里,我改变了交叉函数,如下所示:

function intersect(drag, target){
    var pt = drag.globalToLocal(target.x, target.y); //-----This line
    if(target.hitTest(pt.x, pt.y)){
        return true;
    }else{
        return false;
    }
}

以前是localToLocal(),但这搞砸了,所以我去了globalToLocal()。由于我不知道的原因,这导致它远远高于实际点数。

此时,它只是想弄清楚如何缩放放置目标位置,同时保持响应。