現在、に値を追加していHashMap<String, SpriteSheetAnimation>
ます。また、入力クラスのLoadFileメソッドのハッシュマップに追加しています。FileLoaderで参照が作成されるGameObjectクラスの一部であるハッシュマップに追加すると。ハッシュマップを変更し、それにキーと値を追加します。すべて問題ありません。
次に、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);
}
}