我还有一点问题。 我有6个不同的对象。我们称他们为a,b,c,d,e,f。这些对象中的每一个都包含对象(按钮),我将它们用作某种命中区域(参见链接中的图片)!
http://postimg.org/image/j2h4y2c65/
图片中的两个对象都是可移动的对象。每个对象都有起始位置。 我想这样做:
如果对象a.hitzoneA与b.hitzoneB(a.hitzoneA.hitTestObject(b.hitzoneB))发生冲突,则将对象“a”返回到起始位置,并将对象“b”保留在原位。 反之,如果对象b.hitzoneB命中a.hitzoneA,我希望对象b移动到它的起始位置。
我尝试使用if / else if / else,对象数组,但没有运气。每次都有两个物体到达它的起始位置。有人可以建议解决这个问题吗?
答案 0 :(得分:0)
任何时候对象A的命中箱与对象B的命中箱重叠,反之亦然。因此,对于两个对象同时执行hitTest将始终如此。你可以在第一个返回true时取消第二个hitTest,但这只会导致对象A总是移回到它的起始位置,而不会对象B。
似乎您只希望移动的对象返回其起始位置,就像用户使用鼠标单击并将该对象拖动到另一个位置一样。如果是这样,请在用户尝试将其放置在某处时检查hitTest。如果hitTest返回true,则仅将该对象移回其起始位置。
编辑:
这是一个onMouseReleased函数示例(传递给您的事件侦听器):
private function onMouseReleased(e:Event):void{
var movingObject:MovableObject = getMovingObject(); //returns reference to the object being moved. Can save this reference when the user first clicks on the object to move.
if(movingObject == a && a.hitzoneA.hitTestObject(b.hitzoneB)){
a.x = startAx;
a.y = startAy;
}
else if(movingObject == b && b.hitzoneB.hitTestObject(a.hitzoneA)){
b.x = startBx;
b.y = startBy;
}
movingObject.stopDrag();
}
这仍然是一种相当笨重的方式来做你想要的。使用更加面向对象的方法可以更好地扩展。但是,这样的事情可行。