3

私と私の友人はゲームに取り組んでおり、基本的に、キャラクターがヒットした場合 (クモ)、キャラクターが健康を失うヒットボックスを設定しています。

for ループを使用しているため、避けられないことが起こります。プレイヤーは 1 つずつ体力を失いますが、あまりにも速く人間の目には見えません。したがって、プレイヤーがクモを叩いている x 時間ごとに、タイマー、一時停止、または何かが必要です。コードは次のとおりです。

        if (ResetEntities.spiderObj.intersects(ResetEntities.blueCharacterObj)) {
        try {
            Thread.sleep(10);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        for (int i = 0; i < 100; i++) {
            if (ResetEntities.blueHealth < 0) {
                ResetEntities.blueHealth = 0;
                Frame.blueHealthLabel.setText("Health: "
                        + ResetEntities.blueHealth);
            } else {
                ResetEntities.getBlueHealth(ResetEntities.blueHealth - 1);
                Frame.blueHealthLabel.setText("Health: "
                        + ResetEntities.blueHealth);
            }
        }
    }

このコードには、交差をチェックする if ステートメントがあります。私はスクリプトをスリープさせようとしました (10 は信じられないほど速いことに気付きましたが、1000 は恐ろしく遅れるので、Thread#sleep私が想像する方法ではありません)。次に、for ステートメントを 100 回実行します (プレイヤーの健康状態)。次に、ヘルスが 0 を下回ったかどうかを確認し、0 に戻して、プレイヤーが負のヘルスを取得できないようにします。0 未満でない場合は、else を実行してヘルスを 1 引きます。しかし、私が言ったように、これは速すぎて見ることができません。

何か助けはありますか?

4

3 に答える 3

2

伝統的な方法 (そして私の意見では最善の方法) は、負傷したキャラクターを特定の時点まで無敵にすることです。 millis-count) などの特定の時間 (または文字依存の回復時間) を追加し、そのタイムスタンプを文字オブジェクトに記録します。キャラクターを負傷させたいゲームティックは、最初にキャラクターがまだ隠れた無敵状態にあるかどうかをチェックします。通常、ゲームの状態を更新する複数のスレッドを実際には必要としないため、これは特に優れています。

于 2013-03-11T15:57:53.343 に答える
1

バックグラウンド プロセスのタイミングにはタイマーを使用します。またjavax.swing.SwingUtilities.invokeLater(Runnable)、GUI を更新するために使用します。

于 2013-03-11T15:53:13.353 に答える
1

質問は明確ではありませんが、健康状態が急速に低下するのをどのように防ぐことができるかを尋ねていますか? もしそうなら、これは私がすることです:

invincibilityTime の int 値を設定し、プレイヤーがヒットしたら 100 に設定する必要があります。その後、ゲームがゲームループを通過するたびに値が 1 減少します。if(invincibilityTime <= 0)の前に置い(ResetEntities.spiderObj.intersects(ResetEntities.blueCharacterObj))て、無敵期間が経過したかどうかを確認します。

于 2013-03-11T15:58:51.473 に答える