多个对象碰撞as3

时间:2014-06-05 21:41:16

标签: actionscript-3 object hittest

我还有一点问题。 我有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,对象数组,但没有运气。每次都有两个物体到达它的起始位置。有人可以建议解决这个问题吗?

http://pastie.org/private/gfrxgzsv4jj7qdvh3vzphq

1 个答案:

答案 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();
}

这仍然是一种相当笨重的方式来做你想要的。使用更加面向对象的方法可以更好地扩展。但是,这样的事情可行。