我目前正在向HashMap<String, SpriteSheetAnimation>
. 我还在我的输入类的 LoadFile 方法中添加了哈希映射。当我添加到 hashmap 时,它是在 FileLoader 中创建引用的 GameObject 类的一部分。我改变了 hashmap,向它添加键和值,一切都很好。
然后,我继续将 GameObject 对象添加到 objectManager 中,在其中存储我的游戏的所有对象。但是,当我在 ArrayList 中引用该对象时,我在文件加载器中添加的 SpriteSheetAnimation 值和该值的键不再存在。如果我在添加它们后尝试从 FileLoader 中访问它们,它们就在那里。我有点困惑。这里可能存在范围问题吗?
我刚刚意识到一些可以帮助你帮助我的东西..(System.out.println)
如果我运行它,当我尝试使用 .toString 获取时组件不存在
private void LoadControllableEntity(XMLEventReader eventReader, int x, int y)
{
entities.ControllableEntity entity = new entities.ControllableEntity(x, y);
entity.addComponent(new components.InputComponent(entity), "input");
while(eventReader.hasNext())
{
try
{
XMLEvent event = eventReader.nextEvent();
if(event.isEndElement())
{
if(event.asEndElement().getName().getLocalPart().equals("ControllableEntity"))
{
break;
}
} else if(event.isStartElement())
{
String element = (String) event.asStartElement().getName().getLocalPart();
if(element.equals("renderable"))
{
entity.addComponent(new components.Renderable(entity), "renderer");
}
else if(element.equals("animationComponent"))
{
entity.addComponent(getAnimationComponent(entity, event.asStartElement().getAttributes(), eventReader), "animation");
}
}
} catch(XMLStreamException e)
{
e.printStackTrace();
}
System.out.println(entity.getComponent("animation").toString());
managers.ObjectManager.getInstance().addObject(entity);
}
}
但是,当我运行此代码时..它可以很好地获取组件(请注意,我已经更改了尝试获取组件的位置。)
private void LoadControllableEntity(XMLEventReader eventReader, int x, int y)
{
entities.ControllableEntity entity = new entities.ControllableEntity(x, y);
entity.addComponent(new components.InputComponent(entity), "input");
while(eventReader.hasNext())
{
try
{
XMLEvent event = eventReader.nextEvent();
if(event.isEndElement())
{
if(event.asEndElement().getName().getLocalPart().equals("ControllableEntity"))
{
break;
}
} else if(event.isStartElement())
{
String element = (String) event.asStartElement().getName().getLocalPart();
if(element.equals("renderable"))
{
entity.addComponent(new components.Renderable(entity), "renderer");
}
else if(element.equals("animationComponent"))
{
entity.addComponent(getAnimationComponent(entity, event.asStartElement().getAttributes(), eventReader), "animation");
System.out.println(entity.getComponent("animation").toString());
}
}
} catch(XMLStreamException e)
{
e.printStackTrace();
}
managers.ObjectManager.getInstance().addObject(entity);
}
}