我正在尝试使用Slick2D和Tiled Map Editor制作一个基本的2D游戏。我已经弄清楚如何使用TileProperties进行基本的碰撞检测,但我不确定Objects如何使用地图编辑器。我正在尝试做两件事(如果可能的话):更精确的多边形碰撞检测和地图上玩家可以拿起的游戏物品。
问题是我不知道如何检查对象。我查看了Slick javadoc,我看到了一些将int ObjectId和ObjectGroup作为参数的方法,但我不确定它们是如何被找到的。有人可以解释一下吗?即使我知道如何检查对象,我如何扫描整个地图,例如“项目”对象并用它做事情,比如在那个位置渲染图像?
非常感谢任何帮助。
编辑:我想我现在知道如何使用对象,但我仍然不知道如何获取objectID和objectGroupID。有人可以解释一下从Tiled或Slick获取ID吗?
答案 0 :(得分:1)
查看java doc http://slick.ninjacave.com/javadoc/和对象TiledMap。
这里需要的两种方法是:
getObjectGroupCount()
&
getObjectCount(int groupid)
getObjectGroupCount()
方法将返回平铺地图中作为对象图层的图层总数,或者更确切地说是每个对象图层的标识符。
getObjectCount(int groupid)
将返回任何给定图层上的对象总数或对象组中的对象数量。
从这里你可以看到地图中的图层总数以及每个图层上的对象总数,因此您可以知道需要循环多少次才能通过索引访问每个对象,首先它是< strong>组ID ,它是对象ID
我没有看到按名称搜索的方法,如果其他人那么,请纠正我。否则我建议在加载地图时读取此数组。如果你需要在主游戏循环中动态调用任何对象ID(当它正在绘制时),我会把ID保存在稍后可以用来轻松访问对象的地方。
编辑:我会做一个快速的非语法检查或测试代码来解释:
TiledMap aMap = new TiledMap("whatever.tmx");
int objectGroupCount = aMap.getObjectGroupCount();
for( int gi; gi < objectGroupCount; gi++ ) // gi = object group index
{
int objectCount = aMap.getObjectCount(gi);
for( int oi; oi < objectCount; oi++ ) // oi = object index
{
System.out.println( aMap.getObjectName(gi, oi) );
System.out.println( aMap.getObjectProperty(gi, oi, "somepropertyname", "" ) );
}
}