我正在努力使拖拽更准确,而不仅仅是矩形和圆形,而且到目前为止似乎进展顺利。唯一的问题是目标区域与形状实际位置不匹配。
在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更新交叉函数。
答案 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()
。由于我不知道的原因,这导致它远远高于实际点数。
此时,它只是想弄清楚如何缩放放置目标位置,同时保持响应。