gpt4 book ai didi

java - 向 HashMap 添加值

转载 作者:太空宇宙 更新时间:2023-11-04 07:56:27 25 4
gpt4 key购买 nike

我目前正在向 HashMap<String, SpriteSheetAnimation> 添加值。我还在输入类的 LoadFile 方法中添加到 HashMap 中。当我添加到 HashMap 时,它是类 GameObject 的一部分,在 FileLoader 中为其创建了引用。我更改了 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);

}

}

最佳答案

您的第一个代码片段的问题在于,您在每次循环时检索并打印animation实体 - 甚至在您添加该实体之前 - 而在您的第二个代码片段中,您仅在添加实体后立即检索并打印它,所以显然它不存在这个问题。

我认为你想改变这一点:

        System.out.println(entity.getComponent("animation").toString());
managers.ObjectManager.getInstance().addObject(entity);

}

对此:

    }

System.out.println(entity.getComponent("animation").toString());
managers.ObjectManager.getInstance().addObject(entity);

也就是说,我认为您希望在 while 循环完成后执行最后几个步骤,而不是在每次迭代结束时执行。

关于java - 向 HashMap 添加值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13548249/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com