在 Java 中从游戏中移除对象 (eclipse)

removing object from game in Java (eclipse)

让我们开始吧,我有一个 'handler' class,它充满了 getter 和 setter,它包含添加和删除对象的代码,它看起来像这样:

public void addObject(GameObject object){
    this.object.add(object);
}
public void removeObject(GameObject object){
    this.object.remove(object);

请注意 'GameObject' 是 class 并且所有对象都扩展了 class
然后我在这里创建一个对象,

if(mouseOver(mx, my, 840/2-100, 149, 200, 64)){
        game.gameState = STATE.Game;
        handler.addObject(new Player(0, 300, ID.Player,game.playerImg, game));
        handler.addObject(new BasicEnemy(700, 300, ID.BasicEnemy, game.enemyImg, game));
        handler.addObject(new F1Jutsu(400, 300, ID.F1Jutsu, game.f1jutsuImg, game));
    }

parameters里面的东西就是我要添加的对象的参数。当然,每个对象都是它自己的 class。现在我想删除对象 F1Jutsu,如果它的 x 值在游戏之外,并且对象每秒向右移动(这是有效的,所以我不会把它粘贴在这里,如果被问到就会做)

        if(x > 800){
        handler.removeObject(this);
    }

我在 'tick' 函数中(在 F1Jutsu class 中)有这个,它类似于 运行 函数。问题是,一旦调用 removeObject 方法,我就会得到一个空指针异常,出现以下错误:

Exception in thread "Thread-2" java.lang.NullPointerException
at com.ninja.main.F1Jutsu.tick(F1Jutsu.java:24)
at com.ninja.main.Handler.tick(Handler.java:14)
at com.ninja.main.Game.tick(Game.java:110)
at com.ninja.main.Game.run(Game.java:87)
at java.lang.Thread.run(Unknown Source)

基本上,在 F1Jutsu class 那里有一个 NullPointerException(我删除了一个 null??但它是一个对象),它被告知要删除对象,然后是调用删除对象的每个地方方法和调用 remove 对象的地方等的所有地方都被放置导致错误。
我认为这个想法可能是对象的 x 值现在为空,这是空指针(?)但不确定,如果是这样,我将如何解决这个问题?
很抱歉 post(土豆?)
编辑:

F1Jutsu 的第 24 行是:

if(x > 800){
        handler.removeObject(this);
    }

MRK 我不确定你的意思,我在上面的代码中包括了我添加对象和删除对象的部分。
编辑:
好的,经过大量工作后我得出结论,当我添加对象时,它被添加为空图像。我必须问如何在不更改代码基础(参数)的情况下将其设置为某些东西(不为空)

您不应该在要删除的对象的代码块中间调用 remove 方法;即使它被删除,它也会尝试完成代码但会失败,因为它的所有变量都将是 null。要修复此错误,我建议在您的 GameObject class 中添加一个名为 removedboolean。不要调用 handler.removeObject(this),只需将 removed 设置为 true。然后,您需要在 tick() 方法中的 Handler class 中添加几行代码,以检查并删除所有 removed 值为 [=17= 的对象].像这样

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