Java从场景中删除对象

Java从场景中删除对象,java,object,Java,Object,我偶然发现了这个问题。在我的引擎中,我终于找到了在满足条件后如何将对象添加到场景中的方法。但是,我仍然不知道如何从场景中移除对象 这是游戏循环 while(isRunning == true) { if(frames > 200) { building1 = false; } if(building1 == true) { if(frames > 100)

我偶然发现了这个问题。在我的引擎中,我终于找到了在满足条件后如何将对象添加到场景中的方法。但是,我仍然不知道如何从场景中移除对象

这是游戏循环

while(isRunning == true)
    {   
        if(frames > 200)
        {
            building1 = false;
        }

        if(building1 == true) {
            if(frames > 100) {
                if(create_001 == true) {
                    model = true;

                    loadModel();

                    create_001 = false;
                }
            }
        }
[...]
(create_001=false;)存在,因此对象只创建一次

这就是模型加载的方式:

private Game game;

public void loadModel() {
    GameObject object = new GameObject();
    Mesh mesh = new Mesh(obj);
    Material material = new Material (new Texture(texture));
    MeshRenderer meshRenderer = new MeshRenderer(mesh, material);
    object.AddComponent(meshRenderer);
    game.AddObject(object);
}
如您所见,我使对象在100帧后显示,并尝试在200帧后再次移除对象,方法是取消对building1的标记(如果选中),但这不起作用

200帧后,物体仍然存在,我不知道为什么,有人有建议吗,因为我不明白为什么它不会那样工作

谢谢你的帮助

编辑:

这是我在loadModel方法末尾调用的AddObject方法的游戏类:

public abstract class Game
{
private GameObject m_root;

public void Init() {}
public void Input(float delta) { GetRootObject().InputAll(delta); }
public void Update(float delta) { GetRootObject().UpdateAll(delta); }
public void Render(RenderingEngine renderingEngine) { renderingEngine.Render(GetRootObject()); }
public void AddObject(GameObject object) { GetRootObject().AddChild(object); }

private GameObject GetRootObject()
{
    if(m_root == null)
        m_root = new GameObject();

    return m_root;
}

public void SetEngine(CoreEngine engine) { GetRootObject().SetEngine(engine); }
}
我可能需要一些删除对象的方法,但不知道如何设计它。。我会再尝试一点,但我仍然愿意接受建议

再次感谢您的帮助

编辑2

这里有一些关于GameObject类的细节。。我们似乎更接近问题的根源:

private ArrayList<GameObject> m_children;
private CoreEngine m_engine;

public GameObject()
{
    m_children = new ArrayList<GameObject>();
    m_engine = null;
}

public GameObject AddChild(GameObject child)
{
    m_children.add(child);
    child.SetEngine(m_engine);

    return this;
}

希望这有帮助:)

如果(帧数>200),您可能需要调用一些“移除对象”? 需要更完整的代码才能理解

public abstract class Game {
  public void RemoveObject(GameObject object) {
    GetRootObject().RemoveChild(object); 
  }
}

class GameObject {
  public void RemoveChild(GameObject child) {
    m_children.remove(child);
  }
}

如果(帧>200),可能需要调用一些“移除对象”? 需要更完整的代码才能理解

public abstract class Game {
  public void RemoveObject(GameObject object) {
    GetRootObject().RemoveChild(object); 
  }
}

class GameObject {
  public void RemoveChild(GameObject child) {
    m_children.remove(child);
  }
}

实际上没有remove_对象代码,我只能说game.AddObject,因为在game类中只有这样一个方法。。我不知道该怎么解决这个问题。。很多东西不是我设计的。我已经在我的问题中添加了游戏类,也许这会有帮助。。?谢谢顺便说一句,create_object方法只是多个loadModel方法的集合,我已经调整了我的问题,使之更合理,很抱歉..看起来您需要实现public void RemoveObject(GameObject object){GetRootObject().RemoveChild(object);}谢谢您的提示!但是GameObject中没有RemoveChild方法,我想我们离问题越来越近了,我再次编辑了我的问题,包括GameObject类的详细信息,我将自己尝试,但任何建议都很好,你已经帮了很多忙,谢谢!public GameObject RemoveChild(GameObject child){m_childs.remove(child);child.SetEngine(null);或某个子.clearnegine();没有真正的remove_对象代码,我只能说game.AddObject,因为在游戏类中只有这样一个方法..不知道如何修复..很多东西不是我设计的。我已经将game类添加到我的问题中,也许这会有帮助..?谢谢!顺便说一下,create_对象方法只是多个loa的集合dModel方法,我已经调整了我的问题以使其更合理,对此表示抱歉..看起来您需要实现public void RemoveObject(GameObject对象){GetRootObject().RemoveChild(object);}谢谢你的提示!但是GameObject中没有RemoveChild方法,我想我们离问题越来越近了,我再次编辑了我的问题,包括关于GameObject类的详细信息,我将自己尝试,但任何建议都很好,你已经帮了很多忙,谢谢!公共GameObject RemoveChild(GameObject儿童){m_children.remove(child);child.SetEngine(null);或某个child.ClearEngine();
public abstract class Game {
  public void RemoveObject(GameObject object) {
    GetRootObject().RemoveChild(object); 
  }
}

class GameObject {
  public void RemoveChild(GameObject child) {
    m_children.remove(child);
  }
}