0

javax.swing.Timer timer;経過時間を計算するのに十分ですか?プレイヤーがゲームをプレイするのにかかった時間を計算する Tetris プロジェクトを行っています。playメソッドでは、

public void play() {
        reset();
        onPlay = true;
        Thread thread = new Thread(new Game());
        thread.start();
        rightPanel.setPlayButtonEnable(false);
        rightPanel.setPause(true);
        rightPanel.setStop(true);
        playItem.setEnabled(false);
        pauseItem.setEnabled(true);
        stopItem.setEnabled(true);
        setBlockColorItem.setEnabled(false);
        setBGColorItem.setEnabled(false);
        rightPanel.requestFocus();
        //time.start();
        //timeElapsed = System.currentTimeMillis();
        RightPanel.timeElapsedTextField.setText("");
        timer.start();
        startTime = System.currentTimeMillis();
    }


stopメソッドでは 、

public void stop() {
        isStop=true;
        onPlay = false;
        if (piece != null) 
            piece.isMoving = false;
        playItem.setEnabled(true);  
        rightPanel.setPlayButtonEnable(true);
        pauseItem.setEnabled(false); 
        rightPanel.setPauseButtonLabel(true);
        stopItem.setEnabled(false);   
        resumeItem.setEnabled(false);
        setBlockColorItem.setEnabled(true);
        setBGColorItem.setEnabled(true);
        rightPanel.setPause(false);
        rightPanel.setStop(false);
        reset();
        //time.stop();
        timer.stop();
        long delta = (System.currentTimeMillis() - startTime)/10;
        RightPanel.timeElapsedTextField.setText(Double.toString(delta/100.0) + " seconds");

    }



それらで十分ですか?経過時間を表示しようとすると、JTextField には何も表示されません。何が間違っている可能性がありますか?どうもありがとうございました!

public void run() {
            int column = 4, style = Piece.SHAPES[(int) (Math.random() * 7)][(int) (Math.random() * 4)];
            //timer.start();
            //startTime = System.currentTimeMillis();
            while (onPlay) {

                if (piece != null) {
                    if (piece.isAlive()) {
                        try {
                            Thread.currentThread().sleep(100);
                        } 
                        catch (InterruptedException ie) {
                            ie.printStackTrace();
                        }
                        continue;
                    }
                }

                checkFullLine();  
                if (isGameOver()) {
                    playItem.setEnabled(true);
                    pauseItem.setEnabled(true);
                    resumeItem.setEnabled(false);
                    rightPanel.setPlayButtonEnable(true);
                    rightPanel.setPauseButtonLabel(true);

                    displayGameOver();
                    return;
                }
                piece = new Piece(style, -1, column, board);
                piece.start();
                //numDropped = numDropped+1;
                //RightPanel.scoreTextField.setText(numDropped+"");
                style = Piece.SHAPES[(int) (Math.random() * 7)][(int) (Math.random() * 4)];
                rightPanel.setTipStyle(style);
                numDropped = numDropped+1;
                RightPanel.numDroppedTextField.setText(numDropped+"");
                //RightPanel.numDroppedTextField = new JTextField(numDropped+"");
                long startTime = System.currentTimeMillis();
            }
            long estimatedTime = ((System.currentTimeMillis() - startTime)/1000);
            RightPanel.timeElapsedTextField.setText(estimatedTime+"");
        }
4

2 に答える 2

2

経過時間を計算するにはnanoTime()を使用する必要があります。

long startTime = System.nanoTime();
// ... the code being measured ...
long estimatedTime = System.nanoTime() - startTime;

ゲーム用に実行中のスレッドがあります。run() メソッドの startTime と run() メソッドの EstimatedTime end で startTime を計算する必要があると思います。Game クラスのコードがわからないので推測するしかありません。

以下は、それを行う方法の簡単な図です。

  import java.util.concurrent.TimeUnit;

  public class Demo implements Runnable {

private volatile boolean shouldRun = true;

@Override
public void run() {
    long startTime = System.nanoTime();
    while (shouldRun) {
        // do nothing
    }
    long estimatedTime = System.nanoTime() - startTime;
    System.out.println(TimeUnit.NANOSECONDS.toSeconds(estimatedTime));//Print apprx 5 seconds since time may be required to actually enter in to run method after start
}

public void stop() {
    shouldRun = false;
}

public static void main(String[] args) throws InterruptedException {
    Demo demo = new Demo();
    Thread thread = new Thread(demo);
    thread.start();
    Thread.sleep(5000);// 5 Seconds sleep
    demo.stop();// Stop the thread
}
}
于 2012-10-10T16:18:26.287 に答える