拖放无法识别 Animate CC 中拖动对象的子项

Drag and Drop not recognizing child of drag object in Animate CC

我正在尝试进行拖放操作,但它给我带来了很多问题。我修好了一个,另一个出现了。我让它工作,它会看到我的拖动对象的任何部分是否进入目标区域,但我希望它只识别一个部分(它是一个尖头温度计的图形,你不能在现实生活中用头测量温度) demo here.

我得到的错误是 "Uncaught TypeError: Cannot read property 'drag' of undefined"(我在演示中标记为 'drag',但它是拖动对象中的子动画片段)

此外,'thermometer' 和 'drag' 都是动画片段的命名实例。

代码:

var dragger = this.thermometer; 

//tried this to see if it would help
var tip = this.thermometer.drag;
var right = this.targetRight;
var wrong = this.targetWrong; 

更新相交:

总而言之,我需要知道如何使其不未定义,以便我可以测试那个小盒子是否在其中一个大盒子中。

发生错误是因为您在那一行中使用了 this.currentTarget 而不是 evt.currentTarget

请注意,您的实际代码与上面发布的代码不同。这是现场演示中的代码:

if(intersect(this.currentTarget.drag, right)){
    evt.currentTarget.alpha=0.2;
} else if(intersect(this.currentTarget.drag, wrong)){
    evt.currentTarget.alpha=0.7;
}
else{
    evt.currentTarget.alpha=1;
}

不确定这是否能解决您的所有问题,但至少应该能让您继续前进。


[更新]

再深入一点,有许多问题可能会导致您的相交功能无法正常工作:

  1. 您的 right/left 范围不正确。 EaselJS 对象没有 widthheight (more info),因此您设置的边界只有 xy.

您可以使用 nominalBounds 来获得正确的边界。这提供了符号的未转换的原始边界。您将不得不考虑任何缩放比例。在这种情况下,边界是: * 左:{x: 0, y: 0, width: 275, height: 300} * 右:{x: 0, y: 0, width: 413, height: 430}

  1. 您的交集必须考虑显示列表层次结构。具体而言,在比较位置和大小时,它们应该是相对的。如果您的拖动目标位于另一个剪辑内,则需要考虑父级定位。我建议在比较坐标时始终对坐标执行 localToGlobal

示例:

// Find the clip's top/left position in the global scope
var p = myContainer.localToGlobal(myClip.x, myClip.y); 
// OR 
// Find the clip's position in the global scope
var p = myClip.localToGlobal(0, 0);