我已经搜索过类似的问题而找不到能够回答我特定情况的问题。我正在Edge Animate中创建一个非常基本的游戏,其中玩家的游戏棋子(一个简单的矩形)可以在舞台上左右,上下移动,并且玩家试图避免与各种其他简单的矩形碰撞沿着舞台(沿着y轴)以不同的速度制作动画(有点像Frogger的垂直版本)。我似乎无法找到一种简单的碰撞检测算法,该算法与Edge Animate一起用于检测玩家的矩形何时与另一个矩形碰撞。这是我在Edge Animate上的代码,仅针对两个矩形的compositionReady动作(试图让它警告矩形正在碰撞:
var object1 = sym.getSymbol("BlueRectangle");
var object2 = sym.getSymbol("RedRectangle");
if (object1.x < object2.x + object2.width && object1.x + object1.width > object2.x &&
object1.y < object2.y + object2.height && object1.y + object1.height > object2.y) {
//物体在触碰 警报(&#34;哎呀!你坠毁了!&#34;); setInterval(sym(e),35);
}
但是当我运行程序时,没有碰撞检测。我究竟做错了什么?我错过了什么?有一个更好的方法吗?我的所有矩形都是轴对齐的。任何帮助将不胜感激。
答案 0 :(得分:1)
看起来你正在检查它们是否完全重叠,而不是碰撞。如果任何重叠,您需要确保检测到碰撞,而不仅仅是完全重叠。
本质上,分解检测与X和Y的重叠,改变&amp;&amp; s暗示1需要与左边和右边的[2]重叠|| s,包裹它括号,放一个&amp;&amp;在那之间和一个类似的声明检查y中的碰撞。
这样的东西应该可以工作,但是你需要知道对象的顶部,左边,右边和底边在哪里(相对于对象的x在哪里:左边,中间,右边?编辑:见imgur.com/GE2vVVB)
if ((object1.xright >= object2.xleft || object1.xleft <= object2.xright) && (object1.ytop >= object2.ybottom || object1.ybottom <= object2.ytop))
答案 1 :(得分:0)
如果我是你,我会做的第一件事是在代码中添加一些调试器行或console.log(...),以便您可以更轻松地调试它。
我认为错误在于你的不平等是倒退......
如果object1在object2的左边,那么 object1.x + object1.width&lt; object2.x
如果object1在对象2的右边,那么 object1.x&gt; object2.x + object2.width
首先尝试并检查左/右碰撞是否正常,然后同样检查上/下。