繁体   English   中英

利用TiledMap进行Libgdx碰撞检测

[英]Libgdx Collision Detection with TiledMap

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

首先,你的Player可能不应该extend Sprite ,因为你的玩家通常不仅仅是一个Sprite 它可能包括几个精灵甚至Animations 保持精灵作为玩家的财产。

这个问题本身已经多次得到了解决。 您通常需要以下步骤:

  1. 在地图中找到碰撞图层
  2. 从该图层中提取所有对象
  3. 检查每个对象是否发生碰撞

在代码中,这可能看起来像这样:

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
    }
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM