所以基本上我要做的就是让一个老板产生(永远10级)并且让屏幕上的其他所有敌人都被移除。所有对象都在链表中并扩展GameObject。
在GameObject中,我删除了一个布尔值:
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
我对LinkedLists不是很好,所以这非常令人困惑。
修改的
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);
答案 0 :(得分:1)
由于您致电this.removed = true;
,我们知道这是boolean
或Boolean
。我
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
Boolean
,默认null
如果object.get(i).removed == true
为NullPointerException
,则调用Boolean
会触发Boolean
(因为从boolean
到object.removeIf(GamObject::isRemoved)
的外包装。)
供参考:
删除每个标志值的循环可以更改为使用带有谓词的Collection.removeIf
(这里,getter返回一个布尔值)来删除每个标记的项(该方法迭代集合)
public boolean isRemoved()
假设GameObject
中有一个吸气器routes->web.php
。