globalToLocal 的行为不符合我的预期? (很确定我只是不明白)
globalToLocal not behaving as I expected? (pretty sure I'm just not getting it)
我已经问了几个关于这个的问题,关于它的其他问题,但我已经快完成了!
我正在 Animate CC 中进行拖放交互,我几乎已经开始工作了。它可以识别拖放,但目标区域的位置似乎不正确。 Demo
我猜这与我没有正确地 globalToLocal()
有关,但我不确定。到目前为止,修改我的 w1
、w2
、h1
、h2
中的值没有任何改变。
这是相交测试功能,它是一个非常流行的基于 here
function intersect(obj1, obj2){
var objBounds1 = obj1.nominalBounds.clone(); //used nominalBounds for shape in animateCC
var objBounds2 = obj2.nominalBounds.clone();
var pt = obj1.globalToLocal(objBounds2.x, objBounds2.y); //is this what's wrong?
var h1 = -(objBounds1.height / 2 + objBounds2.height);
var h2 = objBounds2.height / 2;
var w1 = -(objBounds1.width / 2 + objBounds2.width);
var w2 = objBounds2.width / 2;
if(pt.x > w2 || pt.x < w1){
spliceThis(hitTestArray, obj2);
return false;
}
if(pt.y > h2 || pt.y < h1){
spliceThis(hitTestArray, obj2);
return false;
}
if(hitTestArray.indexOf(obj2) < 0){ //Obj2 not found
hitTestArray.push(obj2);
}
return true;
}
obj1
是拖动对象,obj2
是放置目标。我知道 easelJS 没有宽度和高度,所以也许这是它的一部分?但我不确定我将如何重构它来解决这个问题。此外,它有点工作,所以我不确定如果高度和宽度只是空值,为什么会这样?
我是完全不理解这个,还是我接近了?
从技术上讲,我找到了导致问题的原因,但我不知道为什么。
正在发生的事情是 obj1
和 obj2
上边界的 x 和 y 在舞台上被设置为负值。我还不知道为什么,但是嘿,至少我现在知道出了什么问题……也许其他人可以详细说明?我还是 JavaScript 和 EaselJS 的新手。
更新:
修复了行 var pt = obj1.globalToLocal(obj2.x, obj2.y);
因为它使用的是负边界,但是 obj2
在 x 和 y 上没问题。然后将注册表点更改为左上角,因为它在那部分很好,但仍然进入空白区域。
它现在按预期工作,但我仍然不知道为什么它返回负值。
我已经问了几个关于这个的问题,关于它的其他问题,但我已经快完成了!
我正在 Animate CC 中进行拖放交互,我几乎已经开始工作了。它可以识别拖放,但目标区域的位置似乎不正确。 Demo
我猜这与我没有正确地 globalToLocal()
有关,但我不确定。到目前为止,修改我的 w1
、w2
、h1
、h2
中的值没有任何改变。
这是相交测试功能,它是一个非常流行的基于 here
function intersect(obj1, obj2){
var objBounds1 = obj1.nominalBounds.clone(); //used nominalBounds for shape in animateCC
var objBounds2 = obj2.nominalBounds.clone();
var pt = obj1.globalToLocal(objBounds2.x, objBounds2.y); //is this what's wrong?
var h1 = -(objBounds1.height / 2 + objBounds2.height);
var h2 = objBounds2.height / 2;
var w1 = -(objBounds1.width / 2 + objBounds2.width);
var w2 = objBounds2.width / 2;
if(pt.x > w2 || pt.x < w1){
spliceThis(hitTestArray, obj2);
return false;
}
if(pt.y > h2 || pt.y < h1){
spliceThis(hitTestArray, obj2);
return false;
}
if(hitTestArray.indexOf(obj2) < 0){ //Obj2 not found
hitTestArray.push(obj2);
}
return true;
}
obj1
是拖动对象,obj2
是放置目标。我知道 easelJS 没有宽度和高度,所以也许这是它的一部分?但我不确定我将如何重构它来解决这个问题。此外,它有点工作,所以我不确定如果高度和宽度只是空值,为什么会这样?
我是完全不理解这个,还是我接近了?
从技术上讲,我找到了导致问题的原因,但我不知道为什么。
正在发生的事情是 obj1
和 obj2
上边界的 x 和 y 在舞台上被设置为负值。我还不知道为什么,但是嘿,至少我现在知道出了什么问题……也许其他人可以详细说明?我还是 JavaScript 和 EaselJS 的新手。
更新:
修复了行 var pt = obj1.globalToLocal(obj2.x, obj2.y);
因为它使用的是负边界,但是 obj2
在 x 和 y 上没问题。然后将注册表点更改为左上角,因为它在那部分很好,但仍然进入空白区域。
它现在按预期工作,但我仍然不知道为什么它返回负值。