【问题标题】:removing object from game in Java (eclipse)从 Java 中的游戏中删除对象(eclipse)
【发布时间】:2015-05-24 06:39:14
【问题描述】:

让我们直接进入它,我有一个“处理程序”类,它充满了 getter 和 setter,它包含添加和删除对象的代码,它看起来像这样:

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

请注意,“GameObject”是一个类,所有对象都扩展了该类
然后我在这里创建一个对象,

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));
    }

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

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

我在一个“tick”函数(在 F1Jutsu 类中)有这个,就像一个运行函数。问题是,只要调用 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 类中有一个 NullPointerException(我正在删除一个 null?? 但它是一个对象),它被告知要删除对象,然后是每个调用删除对象方法的地方以及正在调用的任何地方放置调用删除对象等的地方会导致错误。
我认为这个想法可能是对象的 x 值现在是 null,它是 nullpointer(?) 但不确定,如果是这样,我将如何解决这个问题?
很抱歉这篇长文(土豆?)
编辑:

F1Jutsu 的第 24 行是:

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

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

【问题讨论】:

  • "我正在删除一个 null?? 但它是一个对象" - 对象可以null
  • 为什么不直接调试一下看看什么是空的?或者只是检查空,如果(对象!=空)删除..
  • 什么是 F1Jutsu.java 第 24 行?
  • 正是我要问的问题
  • 你是否覆盖了equals和hashCode,否则java会猜测这些值是什么,你将无法控制,我猜你在尝试删除这些对象时将子对象添加到列表中找不到它因为子对象没有定义。例如,您可能在子类中有不同的类成员,但是在添加时添加超类。从处理程序中删除后,未定义子项??也许?

标签: java eclipse class object handler


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2021-11-22
    • 2016-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-05
    • 1970-01-01
    • 1970-01-01
    • 2020-02-05
    相关资源
    最近更新 更多