Actionscript 3 多对象碰撞as3

Actionscript 3 多对象碰撞as3,actionscript-3,object,hittest,Actionscript 3,Object,Hittest,我还有一个小问题。 我有6个不同的物体。我们叫他们a,b,c,d,e,f。这些对象中的每一个都包含对象(按钮),我将它们用作某种命中区域(请参见链接中的图片) 图片中的两个物体都是可移动的物体。每个对象都有起始位置。 我想这样做: 如果对象a.hitzoneA与b.hitzoneB(a.hitzoneA.hitTestObject(b.hitzoneB))发生碰撞,请将对象“a”返回到起始位置,并将对象“b”保留在其所在位置。 反之亦然,如果对象b.hitzoneB击中a.hitzoneA,我

我还有一个小问题。 我有6个不同的物体。我们叫他们a,b,c,d,e,f。这些对象中的每一个都包含对象(按钮),我将它们用作某种命中区域(请参见链接中的图片)

图片中的两个物体都是可移动的物体。每个对象都有起始位置。 我想这样做:

如果对象a.hitzoneA与b.hitzoneB(a.hitzoneA.hitTestObject(b.hitzoneB))发生碰撞,请将对象“a”返回到起始位置,并将对象“b”保留在其所在位置。 反之亦然,如果对象b.hitzoneB击中a.hitzoneA,我希望对象b移动到其起始位置

我尝试使用if/else if/else,对象数组,但没有成功。每次,两个对象都会转到其起始位置。有人能提出解决这个问题的办法吗


每当对象A的hitbox与对象B的hitbox重叠时,反过来也是正确的。因此,同时对两个对象执行命中测试总是正确的。当第一个hitTest返回true时,您可以取消第二个hitTest,但这只会导致对象A始终移回其起始位置,而不会移动对象B

似乎您只希望正在移动的对象返回其起始位置,就像用户正在使用鼠标单击并将该对象拖动到另一个位置一样。如果是这样,请在用户尝试将其放置到某个位置时立即检查hitTest。然后,如果命中测试返回true,则仅将该对象移回其起始位置

编辑:

以下是onMouseReleased函数的示例(传递给事件侦听器):


这仍然是一个相当笨拙的方式来做你想要的。使用更面向对象的方法,它的扩展性会更好。不过,类似的方法可能会奏效。

我明白。有没有一种方法可以在不进行hit测试的情况下做到这一点?我认为问题出在IF/ELSE/ELSEIF循环中。。。是的,只是我正在移动的对象。if(a.hitzoneA.hitTestObject(b.hitzoneB)){a.x=startAx;a.y=startAy;}else if(b.hitzoneB..hitTestObject(a.hitzoneA){b.x=startBx;b.y=startBy;}else{a.x=startAx;a.y=startAy;b.x=startBx;b.y=startBy;{如果你知道我的意思,这个循环是在某种鼠标释放功能中。这个代码是不正确的,如果鼠标被释放而它们没有重叠,那么这两个对象总是会向后移动(else子句)。我将编辑我的帖子,展示一种更好的方法。它给了我一个错误1046。我有点困惑,因为我是面向对象编程的新手,我必须从头开始创建益智游戏。我在“游戏中要做的事”中做了大部分事情最糟糕的问题是我的母语不是英语,而且我在Flash和AS3中都没有过期版本。。。
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();
}