gpt4 book ai didi

java - 多边形的 Libgdx 交集

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:26:04 29 4
gpt4 key购买 nike

我正在通过向 Mario Zechner 的开源跳线游戏添加更多功能来学习 libgdx。我正在尝试制作一些带有角度的平台并遇到旋转矩形的碰撞检测问题。
我关注了this解决方案并使用多边形和我的矩形边界。
出于测试目的,我还没有设置角度。我只想验证鲍勃是否正确地跳下了平台。但由于某种原因,这是行不通的。边界要么太靠左,在平台上方,要么根本不存在。我没有正确设置多边形吗?使用 Box2d 会更容易吗?我对此没有任何经验,我想知道这对于简单平台来说是否有点过头了。

public PlatformClient(int platformType, float x, float y) {
this.platformType = platformType;
float x1 = x - Platform.PLATFORM_WIDTH/2;
float y1 = y + Platform.PLATFORM_HEIGHT/2;

this.polyBounds = new Polygon(new float[]{x1, y1, x1+Platform.PLATFORM_WIDTH, y1, x1+Platform.PLATFORM_WIDTH, y1-Platform.PLATFORM_HEIGHT, x1, y1-Platform.PLATFORM_HEIGHT});
polyBounds.setPosition(x-Platform.PLATFORM_WIDTH/2, y-Platform.PLATFORM_HEIGHT/2);
}

class Platform {
public static final float PLATFORM_WIDTH = 2f;
public static final float PLATFORM_HEIGHT = 0.35f;

}

在 Bob 类中,当他移动时更新多边形边界:

public void update(float deltaTime) {   
...
position.add(velocity.x * deltaTime, velocity.y * deltaTime);
bounds.x = position.x - BOB_WIDTH / 2;
bounds.y = position.y - BOB_HEIGHT / 2;
float newX = position.x - BOB_WIDTH / 2;
float newY = position.y - BOB_HEIGHT / 2;
polyBounds.setVertices(new float[]{
newX, newY,
newX+BOB_WIDTH, newY,
newX+BOB_WIDTH, newY-BOB_HEIGHT,
newX, newY-BOB_HEIGHT});
}

在世界级:

 private void checkPlatformCollisions () {
int len = platforms.size();
for (int i = 0; i < len; i++)
{
PlatformClient platform = platforms.get(i);
if (bob.position.y >= platform.position.y)
{
if(Intersector.overlapConvexPolygons(bob.polyBounds, platform.polyBounds))
{
System.out.println("it overlaps");
// jump off platform
}
}
}
}

编辑

感谢形状渲染器,我能够正确设置多边形。我修复了上面代码中的一些 +,- 问题。但是下面的代码:Intersector.overlapConvexPolygons() 仍然不起作用(见图)。他在多边形接触之前就跳了,或者他根本不跳。还有其他想法吗?

enter image description here

这就是我如何绘制 Bob 的多边形和明显重叠的平台。

 public void render() {
shapeRenderer.setProjectionMatrix(cam.combined);
shapeRenderer.begin(ShapeType.Line);
for(int i=0; i<world.platforms.size(); i++) {

shapeRenderer.setColor(1, 0, 0, 1);

shapeRenderer.polygon(world.platforms.get(i).polyBounds.getVertices());
shapeRenderer.polygon(world.bob.polyBounds.getVertices());
}
shapeRenderer.end();
}

最佳答案

好的,我通过删除解决了

polyBounds.setPosition(x-Platform.PLATFORM_WIDTH/2, y-Platform.PLATFORM_HEIGHT/2);

来自构造函数。现在碰撞工作正常。

关于java - 多边形的 Libgdx 交集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21249486/

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