利用TiledMap进行Libgdx碰撞检测

时间:2013-11-19 04:33:50

标签: java libgdx collision-detection

我正在努力通过平铺地图实施碰撞检测系统。我有一个2D的“口袋妖怪风格”游戏,有一个平铺的地图呈现。具体来说,我的平铺地图.tmx文件中有一个“碰撞”图层,我希望与播放器和其他实体进行交互。我的问题是如何将播放器精灵(扩展Sprite类)连接到平铺贴图的“碰撞”图层并导致两者之间发生碰撞。任何建议都表示赞赏。

1 个答案:

答案 0 :(得分:12)

首先,您的Player可能不应该extend Sprite,因为您的播放器通常远远超过Sprite。它可能包括几个精灵甚至Animations。保持精灵作为玩家的财产。

问题本身已经多次受到质疑。您通常需要以下步骤:

  1. 在地图中找到碰撞图层
  2. 从此图层中提取所有对象
  3. 检查每个对象是否发生碰撞
  4. 在代码中,这可能看起来像这样:

    int objectLayerId = 5;
    TiledMapTileLayer collisionObjectLayer = (TiledMapTileLayer)map.getLayers().get(objectLayerId);
    MapObjects objects = collisionObjectLayer.getObjects();
    
    // there are several other types, Rectangle is probably the most common one
    for (RectangleMapObject rectangleObject : objects.getByType(RectangleMapObject.class)) {
    
        Rectangle rectangle = rectangleObject.getRectangle();
        if (Intersector.overlaps(rectangle, player.getRectangle()) {
            // collision happened
        }
    }
    

    您可能感兴趣的更多链接: