我正在使用java创建一个小型坦克游戏。在该游戏中,生命包和硬币堆不时在游戏网格上的随机位置生成。他们都有有限的生命周期,在生命周期结束后,他们就会从场上消失。当它们在网格上可见时,任何坦克都可以在消失之前获得它们。我想将 lifepack 对象和 coinpile 对象的列表保存在ArrayList中,以便通过游戏 AI 算法访问它们。我希望使用简单的java知识实现上述概念如下。
以下是我的 LifePack 类。CoinPile 类的行为方式类似:
public class LifePack extends Thread{
    public int healthBonus;
    public int lifetime;
    public String type;
    public Point location;
    public boolean visible;
    public LifePack(int x,int y,int lifetime){
        location=new Point(x, y);
        this.lifetime=lifetime;
        this.type="health_pack";
        this.visible=true;
        this.start();
    }
    public void run(){
        while(true){
            if(this.lifetime>0){
                try{
                    Thread.sleep(1);
                    if(lifetime%1000==0){
                        System.out.println("Life pack "+this.getId()+" will be disappeared in "+this.lifetime/1000+" s");
                    }
                    this.lifetime--;
                }
                catch(Exception ex){
                    ex.printStackTrace();
                }
            }
            else{
                this.visible=false;
                this.interrupt();
                break;
            }
        }
        System.out.println("Life pack visibility = "+this.visible);
    }
}
我想将新创建的 LifePack 对象添加到数组列表中,如下所示:
public ArrayList<LifePack> lifePacks;
lifePacks = new ArrayList<LifePack>();
lifePacks.add(new LifePack(x, y, lifeTime));
每次创建新的生命包时,我都会将该生命包对象添加到上面的数组列表中。一旦生命包的生命周期到期,我想将上述类中的“可见”布尔变量设置为“ false ”,以便我可以检查该变量以用于其他目的。
但我没有得到我想要的输出。我可以将正在运行的线程对象添加到上面的数组列表中并保持线程状态运行,还是我必须移动到不同的实现?如果有解决方案,请有人帮我解决这个问题。
谢谢你。