mapobject:设置对象属性,而不是自定义对象属性?

pvabu6sv  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(410)

我加载 TiledMap map ,然后加载所有 MapObject s到 MapObject[] npc ,
我想将其中一个对象复制到第二个平铺贴图上的其他位置。

npcs[0].getProperties().put("X", 0);
npcs[0].getProperties().put("Y", 0);
secondMap.getLayers().get("NPC").getObjects().add(npcs[0]);

对象被放置,但前两行不会将x和y属性更改为0,相反,它们放置自定义属性x和y,我相信。

我怀疑会发生这种情况。如何编辑对象属性,而不是自定义属性?

h4cxqtbf

h4cxqtbf1#

事实证明,您需要根据对象类型进行强制转换才能访问对象属性;我的每个对象都是一个64x64的矩形;

((RectangleMapObject) npcs[0]).getRectangle().setX(0);
((RectangleMapObject) npcs[0]).getRectangle().setY(0);
secondMap.getLayers().get("NPC").getObjects().add(npcs[0]);

但这只会引用同一个npc[0],如果我们尝试添加多个副本,它会将所有副本放在最后一个副本的位置;
对于每个新的副本,我们需要创建一个新的对象示例并复制它的属性,然后简单地编辑不同的属性;我的情况是:

RectangleMapObject object = new RectangleMapObject();
object.getProperties().putAll(npcs[0].getProperties());
object.getRectangle().set(0,0,64,64);
secondMap.getLayers().get("NPC").getObjects().add(object);

这就是我最终设法解决(理解)它的方法。

相关问题