Java - 平铺 map 对象

标签 java dictionary slick2d

我正在尝试使用 Slick2D 和 Tiled Map Editor 制作一个基本的 2D 游戏。我已经弄清楚如何使用 TileProperties 进行基本的碰撞检测,但我不确定对象如何与 map 编辑器一起工作。我正在尝试做两件事(如果可能的话):更精确的多边形碰撞检测和玩家可以在 map 上捡起的游戏元素。

问题是我不知道如何检查对象。我查看了 Slick javadoc,我看到了一些将 int ObjectId 和 ObjectGroup 作为参数的方法,但我不确定如何找到它们。有人可以解释一下吗?即使我知道如何检查对象,我将如何扫描整个 map 以查找“项目”对象并对其进行处理,例如在该位置渲染图像?

任何帮助将不胜感激。

编辑:我想我现在知道如何使用对象,但我仍然不知道如何获取 objectID 和 objectGroupID。有人可以解释一下如何从 Tiled 或 Slick 获取 ID 吗?

最佳答案

查看 Java 文档 http://slick.ninjacave.com/javadoc/和对象 TiledMap。

这里需要的两个方法是: getObjectGroupCount() & getObjectCount(int groupid)

getObjectGroupCount() 方法将返回切片 map 中作为对象图层的图层总数,或者更确切地说是每个对象图层的标识符。

getObjectCount(int groupid) 将返回任何给定图层上的对象总数,或对象组中的对象数量。

从这里您可以得到 map 中的总层数和每层上的对象总数,因此您知道需要循环多少次才能通过索引访问每个对象,首先是 < strong>group id 和 object id

我没有看到按名称搜索的方法,如果有人这样做,请纠正我。否则我建议在加载 map 时读取这个数组。如果有任何对象 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", "" ) );
    }
}

关于Java - 平铺 map 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17512944/

相关文章:

java - 使用 JSON 对象的 POST Http 请求

java - 我如何生成 aiesec API 的访问 token

c# : how to easily display a Dictionary<string, int>?

java - 泛型实现 Map.entrySet() 时遇到问题

python - 需要使用 iLoc 的功能,但对于字典值(文本)

java - Sprite 是在背景下绘制的

java - Slick2d 背景

java - 为什么在绘制字符串后需要禁用 GL_TEXTURE_2D 才能渲染形状?

java - 迭代 Java 集合时最小化复杂度算法

java - 如何在同一应用服务器上从一只耳朵访问另一只耳朵的方法