当前位置: 首页 > 知识库问答 >
问题:

碰撞检测。2 个矩形相交:将源矩形放在区域外

方和顺
2023-03-14

我正在as3中编写一个冲突检测系统。它的目的很简单:我有一些移动的矩形和一些静态的矩形。当一个移动的矩形与另一个矩形碰撞时,我想将源(碰撞)矩形移动到碰撞区域之外,但仍然尽可能靠近(基于源的轨迹)。

在每一帧中,我更新移动矩形的位置,并检查所有矩形之间的接触。

下图代表以下内容:

A:方框#1正以45度角向静态矩形(#2)移动。

b:经过几次“刻度”后,我们看到矩形#1移动到矩形#2(静态)的空间。这是首次检测到影响的点。

c:现在 - 我真正想做的!- 将源矩形 #1 移动到矩形 #2 碰撞区域的外围。

...因此,给定矩形#1的移动角度,并知道矩形#1和#2的总面积和位置,是否有一个公式可以提供矩形#1要移动到的最接近的x和y坐标(这样我们就不再处于完全碰撞中,正如我们在阶段“b”中看到的)。

显然,我想要一个可以在任何运动角度和各种矩形形状下工作的解决方案

提前感谢你的时间:)

共有2个答案

柳越
2023-03-14

假设您的矩形从未旋转过,您可以使用内置方法Rectangle.intecrosts()检查实际的碰撞:

var rectangleA:Rectangle = objectA.getRect(objectA.parent);
var rectangleB:Rectangle = objectB.getRect(objectB.parent);

if(rectangleA.insersects(rectangleB))
{
    // Collision.
}

至于将矩形移回与之碰撞的矩形的外侧,您可以将其轨迹增加180度,然后后退,直到矩形不再相交。

如果你想要更逼真的碰撞和旋转的矩形,请使用像Box2D这样的物理引擎。

穆理
2023-03-14

这个速度限制的重要性在于,只要你在“右上角”移动,你只需要检查碰撞点a、b、d。这个速度限制避免了碰撞点“越过”他们的目标,错过碰撞。假设“a”将移动到“p”点。

即:

//check if p is inside the red box
if (p.x > f.x && p.x < g.x && p.y > i.y && p.y < f.y)
{
    //calculate the intersection of |if| with |aP|
    var x:Number = f.x;
    var y:Number = a.y + ((f.x - a.x) / (p.x - a.x)) * (p.y - a.y);
}
 类似资料:
  • 问题内容: 我遇到一个问题,即一个矩形与另一个矩形发生碰撞。所以我的问题是,如何获取相交方法以检查碰撞?还是在这种情况下还有其他方法可以处理碰撞? 我正在创建一个回合制战斗游戏(类似于《最终幻想》或《龙骑传奇》),其中玩家的角色在屏幕的右侧,而敌人在屏幕的左侧。玩家和敌人轮流进攻。因此,当玩家攻击时,子画面动画会从右到左在屏幕上移动,直到停在敌人面前,进行攻击并返回到其起始坐标。玩家和敌人周围都有

  • 我遇到了一个问题,显示一个矩形与另一个矩形发生了碰撞。所以我的问题是,如何让Intersect方法检查碰撞?或者在这种情况下有其他方法来处理碰撞吗? 我正在制作一个回合制战斗游戏(类似于《最终幻想》或《龙骑兵传说》),其中玩家的角色位于屏幕的右侧,敌人位于屏幕左侧。玩家和敌人轮流攻击。因此,当玩家攻击时,精灵动画会在屏幕上从右向左移动,直到它停在敌人面前,攻击并返回到其起始坐标。玩家和敌人都有一个

  • 因此,我创建了一个方法来检测球形球和矩形球之间的碰撞。我把它分成了4部分;它检测圆的顶部、圆的左侧、圆的底部、圆的右侧和矩形之间的碰撞。其中的两个工作是检测圆上的左点和矩形之间的碰撞,以及检测圆上的右点和矩形之间的碰撞。但是,不起作用的是,如果最上面的点或最下面的点接触矩形,就不会检测到碰撞,正如我记录if语句以查看是否输入它时所看到的那样。下面是我的代码(方法。getr()获取圆圈半径): 我已

  • 我正在编写一个游戏,涉及碰撞的一个移动的圆,由用户控制,和一个移动的矩形,由计算机控制。 完整的代码可以在这里找到:游戏 我在圆和矩形之间的碰撞检测方面遇到了麻烦。当矩形是静态的,碰撞检测工作完美。当圆和矩形的边缘在任一边接触时,程序就会按照它应该的方式进行操作。 这是碰撞检测功能。 谢谢。

  • 在我的自上而下游戏中,当我的玩家通过婴儿床时,我该如何让他发生碰撞?我用的是交叉矩形。 这是我的密码 更新方法 在渲染方法中 这是完整的代码 谁能告诉我矩形碰撞检测的正确实现是什么?没有重叠,我是这个框架的新手。致谢和预付款:)

  • 所以我明白,我现在没有用最好的方式来编写这个代码;这是一种测试运行。我正在尝试使用矩形和intersects属性进行墙碰撞(抱歉,如果我没有使用正确的术语)。到目前为止,我有2个矩形在屏幕上。1玩家控制和游戏中与之冲突的其他玩家。当它们碰撞时,玩家停止移动。问题是,如果玩家试图移动到矩形,而他们已经碰撞,那么玩家不能在垂直于移动的任何方向移动,即如果玩家拿着右箭头键移动到矩形,那么他们不能向上或向