当前位置: 首页 > 面试题库 >

从Java游戏中删除对象(日食)

勾喜
2023-03-14
问题内容

让我们开始吧,我有一个’handler’类,里面充满了getters和setters,并且其中包括添加和删除对象的代码,它看起来像这样:

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方法,我就会得到一个nullpointer异常,出现以下错误:

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
??,但它是一个对象),在该类中被告知要删除对象,然后每个正在调用remove
object方法的位置以及每个调用place调用的位置放置了删除对象等导致错误。
我认为这个想法可能是对象的x值现在为null,这是nullpointer(?),但不确定,如果可以的话,我该如何解决?
抱歉,我的帖子很长(马铃薯?)
编辑:

F1Jutsu的第24行是:

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

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


问题答案:

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

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


 类似资料:
  • 问题内容: 我有一个具有静态对象ArrayList的ClassA 现在,我要像这样从此列表中删除一个对象 这是用Meteorit类编写的。但是,当我想使用ArrayList中的对象时,它将引发异常。 我使用Iterator从ArrayList中删除对象,但是现在我不知道如何在这种情况下使用它。 问题答案: 这是因为某个线程实际上正在for每个循环中查看此列表,也许您正在尝试在for-each主体中

  • 问题内容: 我有一个(尽管我猜这个问题也适用于其他集合)对象。据我了解,当文档讨论删除映射时,那么它就是从哈希表中删除条目,即不一定破坏实际对象。如果该表中唯一剩余的对该对象的引用,那么该对象会被垃圾回收吗? 如果我这样做了,并且表中的那些对象没有在其他任何地方引用,它们会被垃圾回收吗? 最快的方法是实际从表中删除所有条目,同时销毁那些对象。 问题答案: 是的,如果集合是最后引用这些对象的地方,则

  • 问题内容: 如果满足条件,我需要从中删除一些对象,我想知道哪种方法会更有效。 情况如下:我有一个包含包含其他一些对象的类。我必须对此进行迭代,并删除满足特定条件的所有元素。据我所知,这些是我要删除的选项: 创建一个新的并添加不符合条件的元素。迭代之后,从旧的数组列表交换到没有元素的新数组列表。 创建一个新的并添加满足条件的元素。迭代后,使用传递要删除对象的方法。 有没有更有效的方法从中删除对象?

  • 我正在编写一个Android应用程序,从图片中提取数独谜题。对于9x9数独网格中的每个单元格,我需要确定它是包含数字1到9中的一个还是空白。以下是我的算法的大致要点: 自适应阈值拼图 扩展以减少要考虑的轮廓数 找到拼图的轮廓并将其扭曲成正方形 将正方形分成81个相等的单元格;寻找至少有20%白色像素的单元格 找到最靠近这些单元格中心的白色斑点并得到其边界矩形 对边界矩形内的图像部分使用字符识别(k

  • 游戏对象的内容: 数据库原则上在游戏过程中是不会被写入的,而针对地图上人物的走动等等情况,发生变化的是游戏对象。 在Scene_Title脚本中,会生成各种游戏对象,比如command_new_game的方法就是其中的一个,这个方法是在选择了标题画面中的[新的游戏]的时候被运行的。 # 生成各种游戏对象 $game_temp = Game_Temp.new $game_system = Game_

  • GameObjects are containers for all other Components. All objects in your game are inherently GameObjects. 游戏对象是所有其他组件的容器。在你的游戏中的所有物体都是游戏对象。 An empty GameObject 一个空的游戏对象 Creating GameObjects 创建游戏对象 Gam