8

私たちのキャラクターが生きているゲーム(スーパージャンパーのような、このゲームはジャンプゲームです)があります。敵との衝突後、彼のライフは減少します。1秒後に衝突を計算したい。つまり、この 1 秒間で、私のキャラクターが敵と接触しても、何も起こらず、彼はそのまま進みます。このために、GameScreen クラスに「collision」という名前のブール変数を定義し、Wolrd クラスに「collBirds」という名前の別のブール変数を定義します。敵の衝突とcollBirdsとの1回の接触の後、trueに変わります。しかし、1秒後に衝突がfalseに変更されます。System.currentTimeMillis() や「for ループ」などをいくつか使用していますが、何も起こりません。私はJavaが苦手です。

これは私の状態です:

if(World.collBirds == true && collition == false){
        life -= 1;
        lifeString = "Life : " + life;
        World.collBirds = false;
        collition = true;
        for (??? "need to stay here for 1 sec" ???) {
            collition = false;
        }
    }
4

3 に答える 3

38

場合によっては、com.badlogic.gdx.utils.Timerも使用できます。

使用例:

float delay = 1; // seconds

Timer.schedule(new Task(){
    @Override
    public void run() {
        // Do your work
    }
}, delay);
于 2013-04-19T09:13:37.697 に答える
7

最初の衝突が発生したとき、float timeSinceCollision = 0;

次に、各ループで、最後のチェックからの時間を変数に追加し、1 秒以上かどうかをチェックする必要があります。

timeSinceCollision += deltaTime;
if(timeSinceCollision > 1.0f) {
    // do collision stuff
} else {
    // ignore the collision
}
于 2012-05-29T12:30:19.520 に答える
0

これを同じスレッドで実行したい場合は、Thread.sleep() を使用できます。ただし、この場合、現在のスレッドがフリーズし、これがシングル スレッド ゲームの場合、ゲーム全体がフリーズします。ゲームを 1 秒間フリーズさせたくない場合は、スレッドを生成し、そのスレッドでスリープを呼び出し、スリープ後にフラグを変更する必要があります

于 2012-05-29T11:51:43.793 に答える