LibGdx 碰撞

LibGdx Collisions

我目前正在使用 LibGdx 开发我的第一个 Android 游戏项目。这是一款 2D 迷宫游戏,您可以使用触摸输入 "draw" 从其中一个入口到其中一个出口的一条线。世界本身是一个 TiledMap,目前仅作为视觉背景。

我遇到的问题是整个碰撞检测系统。迷宫中(很明显)有墙,位于我的背景图块的边缘。所以当我在墙上滑动手指时,"player line" 应该停在墙上。此外,当线路到达出口时应触发事件。

我找不到使用内置库正确实现这些功能的方法(我尝试使用 Scene2D 和 Box2D)。停止 actor 的动作并触发事件并不那么奇怪,或者?

我只需要一些关于我应该使用什么的信息,也许还有一些第一步。 :) 提前致谢!

碰撞检测可能是制作平铺游戏中最困难的部分。 Libgdx 有很多有用的方法可以帮助您 获取几何体 但是检测到碰撞后的实际碰撞处理(称为碰撞解决)是一个很大的话题。我怀疑你想要的只是玩家停下来。更高级的现实解决方案,如弹跳和摩擦,是 Box2D 擅长的。

首先也是最重要的,获取将要发生碰撞的几何体。

a) 玩家可以用矩形表示。让它扩展 Sprite class,然后您可以使用 getBoundingRectangle() 函数(矩形使事情变得简单,但还有许多其他形状可用于碰撞)。

b) 获取瓷砖的几何形状,也是一堆矩形。 获取周围瓦片的函数。

    public void getsurroundingTiles(int startX, int startY, int endX, int endY, Array<Rectangle> surroundingTiles){



    TiledMapTileLayer layer = (TiledMapTileLayer) worldRef.getCurrentMap().getLayers().get("Terrain");
    surroundingTiles.clear();
    for (int y = startY; y <= endY; y++) {
        for (int x = startX; x <= endX; x++) {
               Cell cell = layer.getCell(x, y);
            if (cell != null && cell.getTile().getProperties().containsKey("blocked")) {
                Rectangle rect = new Rectangle();
                rect.set(x, y, 1, 1);
                surroundingTiles.add(rect);
            }
        }
    }
}

}

该函数获取在Tiled程序中制作的分块地图分块图层,并且仅当分块具有键"blocked".

时才用矩形填充一个Rectangle ArrayList。

所以现在你有代表你的玩家的矩形,代表所有 碰撞块。您可以使用 ShapeRenderer 对象绘制它们。 这就是我正在开发的游戏中的样子。

最后,实际解决冲突是一个更大的话题。这是一个很好的起点。 http://www.metanetsoftware.com/technique/tutorialA.html