Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的延迟/定时器_Java - Fatal编程技术网

java中的延迟/定时器

java中的延迟/定时器,java,Java,到目前为止,我使用的每一种方法都只是暂时冻结我的程序,但我希望游戏继续运行,我只希望屏蔽布尔值在X时间内为真,然后在时间到期后返回假,有什么方法可以做到这一点吗?谢谢 c.removeEntity(tempEnt); c.removeEntity(this); Game.shield = true; // Wait x time and then do the line below; Game.shield = false; 您是否尝试过: Thread.sleep(1000); 您

到目前为止,我使用的每一种方法都只是暂时冻结我的程序,但我希望游戏继续运行,我只希望屏蔽布尔值在X时间内为真,然后在时间到期后返回假,有什么方法可以做到这一点吗?谢谢

    c.removeEntity(tempEnt);
c.removeEntity(this);
Game.shield = true;
// Wait x time and then do the line below;
Game.shield = false;
您是否尝试过:

Thread.sleep(1000);
您是否尝试过:

Thread.sleep(1000);
您是否尝试过:

Thread.sleep(1000);
您是否尝试过:

Thread.sleep(1000);

说你需要研究线程的人不太理解这个问题,伊姆霍

如果你想在游戏中给某个东西一个超时时间,你只需要记录它开始的时间,然后对照开始时间加上你在游戏循环中的持续时间检查当前时间。大概是这样的:

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;
   }
}

说你需要研究线程的人不太理解这个问题,伊姆霍

如果你想在游戏中给某个东西一个超时时间,你只需要记录它开始的时间,然后对照开始时间加上你在游戏循环中的持续时间检查当前时间。大概是这样的:

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;
   }
}

说你需要研究线程的人不太理解这个问题,伊姆霍

如果你想在游戏中给某个东西一个超时时间,你只需要记录它开始的时间,然后对照开始时间加上你在游戏循环中的持续时间检查当前时间。大概是这样的:

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;
   }
}

说你需要研究线程的人不太理解这个问题,伊姆霍

如果你想在游戏中给某个东西一个超时时间,你只需要记录它开始的时间,然后对照开始时间加上你在游戏循环中的持续时间检查当前时间。大概是这样的:

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;
   }
}

既然你没有提到你的框架,我建议你这样做。如果用Swing框架包装游戏,只需使用
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()
无论你用什么方法开始游戏。

既然你没有提到你的框架,我建议你这样做。如果用Swing框架包装游戏,只需使用
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()
无论你用什么方法开始游戏。

既然你没有提到你的框架,我建议你这样做。如果用Swing框架包装游戏,只需使用
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()
无论你用什么方法开始游戏。

既然你没有提到你的框架,我建议你这样做。如果用Swing框架包装游戏,只需使用
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()
以任何方式开始游戏。

您可以尝试以下方法:-

//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
工作正常。希望对您有所帮助。

您可以尝试以下方法:-

//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
工作正常。希望对您有所帮助。

您可以尝试以下方法:-

//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
工作正常。希望对您有所帮助。

您可以尝试以下方法:-

//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

工作正常。希望对您有所帮助。

您需要研究线程!牛仔是怎么说的。可能是一个很好的起点。@t您确定吗?请标记您的框架。不同的框架有不同的处理方法,需要多个线程“同时”处理。您可以创建/管理自己的线程,或者查看Executor接口。不管怎样,如果你不理解它背后的理论,那就很复杂了。另一个选项,也可能是您的最佳选择,是将Game.shield从布尔值更改为“上次启用的时间(或回合)”——这样您就不必担心多线程,只需将Game.shield的值从“now”中减去,即可查看它在重要时是否仍应处于启用状态,或者当使用Game.shield作为“时间盾过期”时。您需要查看线程!牛仔是怎么说的。可能是一个很好的起点。@t您确定吗?请标记您的框架。不同的框架有不同的处理方法,需要多个线程“同时”处理。您可以创建/管理自己的线程,或者查看Executor接口。不管怎样,如果你不理解它背后的理论,那就很复杂了。另一个选项,也可能是您的最佳选择,是将Game.shield从布尔值更改为“上次启用的时间(或回合)”——这样您就不必担心多线程,只需将Game.shield的值从“now”中减去,即可查看它在重要时是否仍应处于启用状态,或者当使用Game.shield作为“时间盾过期”时。您需要查看线程!牛仔是怎么说的。可能是一个很好的起点。@t您确定吗?请标记您的框架。不同的框架有不同的处理方法,需要多个线程“同时”处理。您可以创建/管理自己的线程,或者查看Executor接口。不管怎样,如果你不理解它背后的理论,那就很复杂了。另一个选项,也可能是您的最佳选择,是将Game.shield从布尔值更改为“上次启用的时间(或回合)”——这样您就不必担心多线程,只需将Game.shield的值从“now”中减去,即可查看它在重要时是否仍应处于启用状态,或者当使用Game.shield作为“时间盾过期”时。您需要查看线程!牛仔是怎么说的。可能是一个很好的起点。@t您确定吗?请标记您的框架。不同的框架有不同的处理方法,需要多个线程“同时”处理。您可以创建/管理自己的线程,或者查看Executor接口。不管怎样,如果你不理解它背后的理论,那就很复杂了。另一个选择,也可能是您最好的选择,是将Game.shield从布尔值更改为“上次启用的时间(或回合)”——这样您就不必这样做了