0

一度しか実行されないループをJavaで作成しようとしましたが、

package com.notelek.programs.flat;

import java.awt.event.KeyEvent;

import com.notelek.programs.flat.input.Controller;

public class Game {
    public static int time;
    public Controller controls;

    public Game(){
        controls = new Controller();
    }

    public void tick(Boolean[] key){
        time++;
        Boolean forward = key[KeyEvent.VK_W];
        Boolean back = key[KeyEvent.VK_S];
        Boolean left = key[KeyEvent.VK_A];
        Boolean right = key[KeyEvent.VK_D];
        Boolean turnLeft = key[KeyEvent.VK_LEFT];
        Boolean turnRight = key[KeyEvent.VK_RIGHT];
        for(Boolean i = true; i == true; i = false){
            forward = true;
            back = true;
            left = true;
            right = true;
            turnLeft = true;
            turnRight = true;
        }
        controls.tick(forward,back,left,right,turnLeft,turnRight);
    }    
}

それが私のコードです。前方後方左右turnleft turnright変数をすべてtrueに設定してから、すぐに(1秒以内に)falseに戻す必要があります。これを行う簡単な方法を知っている人はいますか?

4

4 に答える 4

3

ここで、私たちはどのくらい話しているのですか?1 秒以内に (1 秒よりもずっと速く) 切り替えたい場合は、次のようにします。

forward = true;
back = true;
left = true;
right = true;
turnLeft = true;
turnRight = true;
forward = false;
back = false;
left = false;
right = false;
turnLeft = false;
turnRight = false;

操作できるトグルを探している場合は、独自の方法を作成します。

public void toggle() {
    forward = !forward;
    back = !back;
    // and so on
}

...一定のミリ秒が経過した後に呼び出します。

ただし、尋ねられた質問に答えるという精神で、何らかの理由で、本当に、本当に、本当に一度だけ実行されるループを使用したい場合は、その構文を次に示します。

for(int i = 0; i < 1; i++) {
    // do stuff
}
于 2012-12-21T03:46:22.180 に答える
1

本当にループが必要な場合は、これを使用します。

do {
    your code here
} while (false);

IMO、これは少しばかげています...

于 2012-12-21T03:55:14.653 に答える
0

おそらく次のようなことを試してください:

for(int i = 0; i < 2; i++)
{
     Boolean state = (i == 0);
     forwards = state;
     back = state;
     left = state;
     right = state;
     turnLeft = state;
     turnRight = state;

     // Optional sleep
     int milliseconds = 100;
     Thread.sleep(milliseconds);
}

ループは1回循環し、すべてをtrue(i == 0)に設定し、次の繰り返しですべてをに設定してからfasle終了します。

Thread.sleep()値を短期間維持する必要があるかどうかに応じて、はオプションです。

于 2012-12-21T09:16:02.927 に答える
0

なぜループを使いたいのですか?何かをちょっとだけ待たせたいだけなら、wait コマンドを使ってみませんか:

Thread.sleep(int ミリ秒)

必要なコード ブロックを実行し、所定のミリ秒数待ってから、別のコード ブロックを実行するだけです。

int milliseconds = 1000;

forward = true;
back = true;
left = true;
right = true;
turnLeft = true;
turnRight = true;
Thread.sleep(milliseconds)
forward = false;
back = false;
left = false;
right = false;
turnLeft = false;
turnRight = false;
于 2012-12-21T03:48:31.450 に答える