0

オブジェクトを持つ2つの配列があります。例:

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 のみを使用できます。

ご協力ありがとう御座います。

4

1 に答える 1

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 */
}

私はそれをテストしませんでしたが、うまくいくと確信しています...


編集:

ちなみに、ループ内でvar を再設定iしていないことに気付きました。少なくとも 2 番目のループ ( ) でそれを行う必要があります。そうしないと、ループが機能しません。jforj

for (i = 0; i < coins.length; i++) {
    for (j = 0; j < boxes.length; j++) {
于 2013-08-19T15:26:10.937 に答える