基于级别从链表中删除对象



所以基本上我想做的是让一个boss生成(曾经是10个关卡),并删除屏幕上的其他敌人。所有对象都在链接列表中,并扩展了游戏对象。

在游戏对象中,我删除了布尔值,并且:

public GameObject(float x, float y, ID id) {
this.x = x;
this.y = y;
this.removed = removed;
this.id = id;
}

在我拥有的处理程序中,从上一个线程中得出另一个建议:

for (int i = 0; i < object.size(); i++) {
if (object.get(i).removed == true)
object.remove(i);
}

我检查关卡和移除敌人的方式是(基本敌人行 41)这是在基本敌人类中:

if(hud.level % 10 == 0) {
this.removed = true;
}

每次我运行代码并在其中生成一个敌人时,都会在基本敌人的第 41 行抛出一个 nullPointerException。完全错误是:

Exception in thread "Thread-0" java.lang.NullPointerException
at BasicEnemy.tick(BasicEnemy.java:41)
at Handler.tick(Handler.java:13)
at Game.tick(Game.java:92)
at Game.run(Game.java:73)
at java.base/java.lang.Thread.run(Thread.java:844)

int 级别是公共的,在开始时设置为 1

我不太擅长LinkedLists,所以这是非常令人困惑的atm。

编辑

HUD.级别是

public int level = 1;

HUD是跟踪叠加层,当前级别和分数的类,用于增加分数和级别的代码是:

public void tick() {
HEALTH = Game.clamp(HEALTH, 0, 100);
greenValue = Game.clamp(greenValue, 0, 255);
greenValue = HEALTH * 2;
score++;
}

水平:

public void tick() {
scoreKeep ++;
if(scoreKeep >= 100) {
scoreKeep = 0;
hud.setLevel(hud.getLevel() + 1);

既然你叫this.removed = true;,我们知道这是一个booleanBoolean。我

public GameObject(float x, float y, ID id) {
this.x = x;
this.y = y;
this.removed = removed; // ####
this.id = id;
}

但是您没有removed参数,因此它与this.removed = this.removed相同或与不执行相同。

现在,removed类型有两种可能性:。

  • boolean默认false
  • aBoolean,默认null

如果这是Boolean,调用object.get(i).removed == true将触发NullPointerException(因为从Booleanboolean的出局拳击)。

仅供参考:

删除每个标志值的循环可以更改为使用Collection.removeIf,该谓词(此处为返回布尔值的 getter)删除每个标记的项目(该方法迭代集合)

object.removeIf(GamObject::isRemoved)

假设您在GameObject中有一个吸气public boolean isRemoved().

相关内容

  • 没有找到相关文章

最新更新