【问题标题】:AS3 2D Rectangular Collision BlockingAS3 2D 矩形碰撞阻止
【发布时间】:2013-05-05 16:39:13
【问题描述】:

我需要在动作脚本中阻止两个相互碰撞的矩形。我的代码只能在维度上工作(只有 X 上的 X 碰撞或 Y 上的 Y)。当我测试它是否在 X 轴和 Y 轴上发生碰撞时,它们会相互干扰。

函数碰撞测试(obj1,obj2) {

var b1 = getBound(obj1);
var b2 = getBound(obj2);

if(((b1.x < b2.x + b2.width) && (b1.x + b1.width > b2.x)) && ((b1.y + b1.height > b2.y) && (b1.y < b2.y + b2.height)))
{
    if(b1.x + b1.width > b2.x + b2.width)
        obj1.x = b2.x + b2.width;
    else if(b1.x < b2.x)
        obj1.x = b2.x - obj1.width;
    else if(b1.y < b2.y)
        obj1.y = b2.y - obj1.height;
    else if(b1.y + b1.height > b2.y + b2.height)
        obj1.y = b2.y + b2.height;
}

}

如果有任何其他方法可以测试碰撞并阻止它,那么请告诉我,但是我已经在 Google 和 stackoverflow 上进行了搜索,并没有找到任何有用的阻止碰撞的方法,但是我已经发现了很多关于为他们进行测试的信息。

【问题讨论】:

    标签: actionscript-3 block collision


    【解决方案1】:

    第 1 步:获取 Box2d。 第 2 步:谢谢我 :)

    说真的,请使用众所周知的高度优化的库。你可能有更多的机制来处理碰撞。

    如果碰撞是您唯一想要的,那么我建议您使用 hitTest。这样做的好处是您可以相互比较不规则的形状,而不仅仅是盒子。如果 hitTest 为真,您只需在每次对象移动时进行测试。如果是,那么您将恢复到以前的状态,或者将它们并排放置。

    此方法的另一个变体是为您的移动对象添加“光环”。如果光环击中了目标对象,则停止。这样您就不必执行额外的步骤来重新定位对象。

    希望我能清楚地表达自己,我睡着了:D

    【讨论】:

      【解决方案2】:

      hitTestObject 适用于两个矩形对象:

      if (obj1.hitTestObject(obj2))
      {
          // handle collision
      }
      

      【讨论】:

        【解决方案3】:

        如果是纯矩形碰撞,可以使用相交矩形的方法。

        var overlapRect:Rectangle = RECTANGLE1.intersection(RECTANGLE2);
        

        这会将像这样的碰撞信息转储到重叠矩形中。

        从那里您可以使用逻辑找出发生碰撞的位置,并使用交叉点的宽度和高度将一个矩形从另一个矩形移开。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-03-16
          • 1970-01-01
          • 1970-01-01
          • 2014-03-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多