2014-01-15 4 views
0

Каждый метод, который я использую до сих пор, просто замерзает моя программа на время, но я хочу, чтобы игра продолжалась, я просто хочу, чтобы экран boolean был истинным в течение X времени, а затем возвращался к false после времени истек, есть ли способ сделать это? Благодарю.Задержка/Таймер в java

c.removeEntity(tempEnt); 
c.removeEntity(this); 
Game.shield = true; 
// Wait x time and then do the line below; 
Game.shield = false; 
+4

Вам понадобится изучить резьбу! – SpaceCowboy

+1

Что сказал SpaceCowboy. [Эта документация] (http://docs.oracle.com/javase/tutorial/essential/concurrency/), вероятно, является хорошим местом для начала. –

+2

@TFuto вы в этом уверены? – turbo

ответ

0

ли вы попробовать:

Thread.sleep(1000); 
+3

Это, скорее всего, остановит всю программу, если он не использует потоки – turbo

+0

Да, это остановило всю программу:/ – user3166873

3

Люди говорят, что вы должны смотреть в резьбе не совсем понял вопрос, имхо.

Если вы хотите дать что-то тайм-аут в своей игре, вам просто нужно записать время его начала, а затем проверить текущее время на это время начала плюс продолжительность вашего игрового цикла. Что-то вроде этого:

long shieldStartTime; 
long shieldDuration = 10000; //10 seconds 

void startShield(){ 
    Game.shield = true; 
    shieldStartTime = System.currentTimeMillis(); 
} 

//advances your game by one frame, whatever your game loop calls 
void step(){ 
    //game loop stuff 

    if(Game.shield && System.currentTimeMillis() > shieldStartTime + shieldDuration){ 
     Game.shield = false; 
    } 
} 
0

Поскольку вы не указали свою структуру, я предложу это. Если вы заключаете свою игру в рамках свинг, просто использовать javax.swing.Timer

Timer timer = new Timer(delay null); 

public Game() { 

    timer = new Timer(delay, new ActionListener(){ 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      Game.stop(); 
      timer.stop(); 
     } 
    }); 
} 

После того, как время задержки истекло, игра остановится. Вы можете использовать timer.start(); любым способом, который вы используете для начала игры.

0

Вы можете попробовать это: -

//Your Code here 
c.removeEntity(tempEnt); 
c.removeEntity(this); 
Game.shield = true; 
// Wait x time and then do the line below; 

int delay = 10000; //delay 10000 milliseconds 
try{ 
    Thread.sleep(delay); 
    }catch(InterruptedException e){ 
     System.out.println("Interrupted ::"+e.getMessage()); 
    } 

Game.shield = false; 
//Your code here 

его рабочих fine.Hope это поможет вам.

+1

Я думаю, он спрашивает, как это сделать без зависания программы в процессе. – Panzercrisis

Смежные вопросы