Java 用libGdx每五秒钟开火一次

Java 用libGdx每五秒钟开火一次,java,android,libgdx,Java,Android,Libgdx,如何使用libGdx每五秒钟调用一次fire方法 这是我的敌人阶级: 我写了下面的代码,但它是错误的 public class Enemy { private List<Bullet> bullets; private boolean isFire; public Enemy(){ bullets=new ArrayList<Bullet>(); } public void update(float delta)

如何使用libGdx每五秒钟调用一次fire方法

这是我的敌人阶级:

我写了下面的代码,但它是错误的

public class Enemy {

    private List<Bullet> bullets;
    private boolean isFire;

    public Enemy(){
        bullets=new ArrayList<Bullet>();
    }
    public void update(float delta) {
        Gdx.app.log("State", "State Fire");
        if(!isFire){
            Gdx.app.log("State", "Fire");
            fire();
        }else{
            Gdx.app.log("State", "No Fire");
        }
    }
    private void fire() {
        isFire=true;
        bullets.add(new Bullet(5, 32));
        Timer.schedule(new Task(){
            @Override
            public void run() {
                reload();
            }
        }, getDelay());
    }
    private void reload(){
        isFire=false;
    }
    private int getDelay() {
        return 5;
    }
    public List<Bullet> getBullets(){
        return bullets;
    }
}
公敌{
私人清单子弹;
私人火灾;
公敌(){
项目符号=新的ArrayList();
}
公共无效更新(浮动增量){
Gdx.app.log(“州”、“州火灾”);
如果(!isFire){
Gdx.app.log(“状态”、“火灾”);
火();
}否则{
Gdx.app.log(“状态”,“无火灾”);
}
}
私人空间火灾(){
isFire=真;
添加(新的项目符号(5,32));
Timer.schedule(新任务(){
@凌驾
公开募捐{
重新加载();
}
},getDelay());
}
私有无效重新加载(){
isFire=false;
}
private int getDelay(){
返回5;
}
公共列表getBullets(){
返回子弹;
}
}

有办法解决这个问题吗?我不知道

我可以想出两种解决方案:

1) render方法每X毫秒执行一次。你可以用那个

更新

下面的代码是

在该方法中,您可以添加delta来计算自上次执行任何您想执行的操作以来是否已经过了X毫秒。如果是这样,你可以再做一次。如果不是的话,就增加你的计数器。这就是我的意思

double counter = 0;

void render(float delta){

   if (counter >= 5.0){
       counter = 0.0;
       fireUpYourTimelyProcessHere();
   } else {
       counter = counter + delta;
   }

  ... 

   // other rendering stuff

}
但是不要做需要很长时间才能完成的事情,比如发出HTTP请求之类的。 }


2) 或者您可以创建一个常规线程并启动它。但请记住,避免在该线程上进行任何UI渲染

请进一步解释解决方案1
double counter = 0;

void render(float delta){

   if (counter >= 5.0){
       counter = 0.0;
       fireUpYourTimelyProcessHere();
   } else {
       counter = counter + delta;
   }

  ... 

   // other rendering stuff

}