LibGdx碰撞

时间:2015-02-12 20:35:40

标签: android libgdx touch collision

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

我遇到的问题是整个碰撞检测系统。迷宫中有(不经常的)墙壁,位于我的背景砖的边缘。因此,当我将手指滑过墙壁时,"播放器线"应该停在墙上。此外,当线路到达出口时应触发事件。

我找不到使用内置库正确实现这些功能的方法(我尝试使用Scene2D和Box2D)。阻止一个演员的动作和发动一个事件并不是那种异国情调,或者?

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

1 个答案:

答案 0 :(得分:1)

碰撞检测可能是制作平铺游戏最困难的部分。 Libgdx有很多有用的方法可以帮助你获取几何但是检测到碰撞后的实际碰撞处理(称为碰撞解决)是一个很大的主题。我怀疑你想要的就是让球员停下来。 Box2D专注于更加先进的现实解决方案,如弹跳和摩擦。

首先,让几何体碰撞。

a)玩家可以用矩形表示。让它扩展Sprite类然后你可以使用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程序中制作的平铺地图图块图层,并且仅当图块具有键&#34;被阻止&#34;时才填充矩形ArrayList和矩形。

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

simple platformer

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