java中的延迟/定时器
到目前为止,我使用的每一种方法都只是暂时冻结我的程序,但我希望游戏继续运行,我只希望屏蔽布尔值在X时间内为真,然后在时间到期后返回假,有什么方法可以做到这一点吗?谢谢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); 您
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从布尔值更改为“上次启用的时间(或回合)”——这样您就不必这样做了