我有两个带对象的数组。 例如:
var boxes = [],
coins = [],
k = 0;
boxes.push({
x: 300,
y: 350,
width: 500,
height: 500
});
for (k; k < 30; k++) {
coins.push({
x: Math.floor(Math.random() * (10 - 4) + 4) * 100,
y: Math.floor(Math.random() * (4 - 1) + 1) * 100,
width:25,
height:25
});
}
之后我使用for
来绘制这些东西。问题是有时硬币会被装在盒子里。
如何检查硬币是否在盒子范围内?
我在考虑计算方盒和硬币,但我不知道如何完成它。
var i = 0,
j = 0;
for (i; i < coins.length; i++) {
for (j; j < boxes.length; j++) {
if (boxes[j].x + boxes[j].width /* something */ coins[i].x + coins[i].width && boxes[j].y + boxes[j].height /* something */ coins[i].y + coins[i].height) {
/* do nothing */
} else {
ctx.fillRect(coins[i].x, coins[i].y, coins[i].width, coins[i].height);
}
}
}
有人知道如何完成吗?或者也许有其他方式? 我只能使用纯JavaScript。
感谢您的帮助。
答案 0 :(得分:3)
以下是获胜的 if条件:
if (
(boxes[j].x < (coins[i].x + coins[i].width) && (boxes[j].x + boxes[j].width) > coins[i].x) &&
(boxes[j].y < (coins[i].y + coins[i].height) && (boxes[j].y + boxes[j].height) > coins[i].y)
) {
/* HIT - Do nothing */
} else {
/* No Hit - Draw the coin */
}
我没有测试它,但我确信它有效......
修改强>
顺便说一下,我注意到你没有在i
循环中重新设置j
和for
var,至少应该使用第二个循环({{1 }),否则循环它将无法正常工作。
j