gpt4 book ai didi

java - 根据级别从链表中删除对象

转载 作者:行者123 更新时间:2023-11-30 06:10:21 24 4
gpt4 key购买 nike

所以基本上我想做的是生成一个 Boss(每级 10 级)并移除当前屏幕上的所有其他敌人。所有对象都在链表中并扩展 GameObject。

在 GameObject 中,我已将其作为 boolean 值删除:

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 级别是公共(public)的,并且在开始时设置为 1

我不太擅长链接列表,所以这很令人困惑。

编辑

hud.level 为

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 类型有两种可能:.

  • a boolean 默认 false
  • a boolean 值,默认null

如果这是一个 Boolean(因为 out从 Boolean 装箱到 boolean)。

仅供引用:

删除每个标志值的循环可以更改为使用 Collection.removeIf它采用谓词(这里是返回 boolean 值的 getter)来删除每个标记的项目(该方法迭代集合)

object.removeIf(GamObject::isRemoved)

假设您在 GameObject 中有一个 getter public boolean isRemoved()

关于java - 根据级别从链表中删除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50391827/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com