gpt4 book ai didi

java - Libgdx 分块 map 碰撞检测

转载 作者:行者123 更新时间:2023-11-30 08:25:28 27 4
gpt4 key购买 nike

我目前正在开发 2d 角色扮演游戏,例如《最终幻想 1-4》。基本上,我的平铺 map 可以加载, Sprite 可以在 map 上自由行走。

如何处理与平铺 map 的碰撞?

我创建了三个独立的图 block 层。 “背景层”、“碰撞层”、“架空层”,我不确定这是否有用..

编辑:我现在创建了一个对象层,用于与我希望 Sprite 碰撞的区域上的矩形发生碰撞。

非常感谢任何帮助。谢谢!

这是我当前的代码

MapObjects collisionObjects = (GameAssets.mainTiledMap).getLayers().get("CollisionLayer").getObjects();
int tileWidth = 16;
int tileHeight = 16;

for (int i = 0; i < collisionObjects.getCount(); i++) {
RectangleMapObject obj = (RectangleMapObject) collisionObjects.get(i);
Rectangle rect = obj.getRectangle();

rect.set(GamePlayer.x, GamePlayer.y, 16,16);

Rectangle rectobject = obj.getRectangle();
rectobject.x /= tileWidth;
rectobject.y /= tileHeight;
rectobject.width /= tileWidth;
rectobject.height /= tileHeight;

if(rect.overlaps(rectobject)) {
GamePlayer.ableToMove = false;
}
}

最佳答案

我真的不推荐使用矩形。相反,我在自己的游戏中所做的是:

  1. 在 Tiled 中,将您的墙砖指定为已阻挡。为此,只需为每个单独的图 block 添加一个名为 block 的属性。
  2. 在代码中,当你处理玩家移动时,写这样的伪代码:

    try {
    cell = collisionLayer.getCell((int) (x / collisionLayer.getTileWidth()), (int) (y / collisionLayer.getTileHeight()));
    } catch (Exception e) {
    e.printStackTrace();
    }

    if (cell.getTile().getProperties().containsKey("blocked")) {
    blocked = true;
    }

其中 x 和 y 是您要检查的单元格的位置。然后如果 blocked = true,则不要移动玩家。如果 blocked = false,移动玩家。

我可能在这个答案中不清楚,如果我是,请不要犹豫给我发消息或查看this awesome tutorial by dermetfan .

关于java - Libgdx 分块 map 碰撞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22152925/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com