0

Tumult Hype 内で Javascript を使用してブレイクアウト ゲームのコードを追加するためのちょっとした助けを探しています。一定のスコアを出すと球速が上がるようにしようと思っています。

ここまでは、スピード ブースターなしのコードです。

var input1 = event.which || event.keyCode;

if ((input1 == "37") && (window.setLoopLeft == false)) { // LEFT ARROW PRESSED
    window.setLoopLeft = true;
    window.intervalLeft = setInterval(moveLeft, 5);
} else if ((input1 == "39") && (window.setLoopRight == false)) { // RIGHT ARROW PRESSED
    window.setLoopRight = true;
    window.intervalRight = setInterval(moveRight, 5);
} else if ((input1 == "32") && (window.ballLaunched == false)) { // SPACE BAR PRESSED
    window.ballLaunched = true;
    // RUN THE MOVEBALL FUNCTION EVERY 10 MILLISECONDS
    window.intervalMoveBall = setInterval(moveBall, window.ballSpeed);
}

function moveBall() {
    var ballLeft = parseInt(hypeDocument.getElementById("ball").style.left);
    var ballTop = parseInt(hypeDocument.getElementById("ball").style.top);

これは私が追加しているコードです。今私が計画していたのは、window.intervalMoveBall に適用するグローバル変数を作成することでした。次に、1000 ポイントでスコア値を検出し、ボールの速度を 2 倍にして 10 ミリ秒ではなく 5 ミリ秒ごとに移動させる新しい関数を作成します。

どうすればよいかわからないのは、スコア値を検出するように if ステートメントを実際に記述することです。誰かがそれを修正する方法を教えてくれたり、if ステートメントでグローバル関数と新しい関数を使用することがこれでうまくいくかどうかを教えてくれたりできるのではないかと思っていました。

4

1 に答える 1

0

現在 setInterval を使用しているため、時間間隔を変更するには、元の間隔をクリアし、新しい時間間隔で新しい間隔を開始する必要があります。より簡単なアプローチは、次のように、setTimeout を使用して自身を呼び出す責任をもつ moveBall 関数を作成することです (moveLeft と moveRight についても同様です)。

var input1 = event.which || event.keyCode;

if ((input1 == "37") && (window.setLoopLeft == false)) { // LEFT ARROW PRESSED
    window.setLoopLeft = true;
    window.intervalLeft = setInterval(moveLeft, 5);
} else if ((input1 == "39") && (window.setLoopRight == false)) { // RIGHT ARROW PRESSED
    window.setLoopRight = true;
    window.intervalRight = setInterval(moveRight, 5);
} else if ((input1 == "32") && (window.ballLaunched == false)) { // SPACE BAR PRESSED
    window.ballLaunched = true;
    moveBall();
}

function moveBall() {
    setTimeout(moveBall, window.ballSpeed);
    // the rest of your moveBall function
}

これは、moveBall が実行されるたびに異なるタイムスパンを設定できることを意味します。たとえば、いくつかの条件付きロジックを使用します。

function moveBall() {
    setTimeout(moveBall, window.score > 1000 : 5 ? 10);
    // the rest of your moveBall function
}

明らかにこれは無限ループなので、ゲームが終了していないことを確認するなど、これを停止する何らかの方法を追加することもできます。たとえば、

function moveBall() {
    if (window.gameFinished) {
        return;
    }

    setTimeout(moveBall, window.score > 1000 : 5 ? 10);
    // the rest of your moveBall function
}

余談ですが、window オブジェクトに格納された多数のグローバル変数を使用すると、保守が非常に困難になる可能性があるため、JavaScript の名前空間を調べる価値があるかもしれません。

于 2016-12-05T00:26:26.677 に答える