gpt4 book ai didi

android - LibGdx 冲突

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

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

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

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

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

最佳答案

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

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

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

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

    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 程序中创建的分块 map 分块层,并且仅当分块具有键“blocked”时才用矩形填充 Rectangle ArrayList。

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

simple platformer

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

关于android - LibGdx 冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28487273/

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