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