libgdx - 围绕一个点旋转碰撞

时间:2016-05-11 14:06:58

标签: android libgdx

for (int i = 0; i < 13; i++) {
            circleSprites.get(i).setOrigin(circleSprites.get(4).getX(), circleSprites.get(4).getY());
            circleSprites.get(i).rotate(20 * delta);
            circleCollisions.get(i).setPosition(circleSprites.get(i).getX() + 1, circleSprites.get(i).getY() + 1);
        }
        for (int i = 13; i < 26; i++) {
            circleSprites.get(i).setOrigin(circleSprites.get(17).getX(), circleSprites.get(17).getY());
            circleSprites.get(i).rotate(-20 * delta);
            circleCollisions.get(i).setPosition(circleSprites.get(i).getX() + 1, circleSprites.get(i).getY() + 1);
        }

想要类似this!之类的精灵不会像吟唱一样旋转,但我可以想出来。但问题是.rotate只是在视觉上做到了,我检查了坐标并保持不变。那么如何设置如上图所示的旋转碰撞?

1 个答案:

答案 0 :(得分:1)

LibGDX有一个Intersector类,在这些情况下非常有用。

它为所有类型的几何形状提供了多种方法来测试相互交叉。

首先,您需要为每个精灵分配一个圆圈

com.badlogic.gdx.math.Circle circle = new Circle(x,y,r);

然后用你的精灵移动这些,所以我们有一个几何表示来测试(这些圆圈将是我们检查碰撞,而不是精灵,所以我们需要随时用他们代表的精灵移动这些圆圈)。

然后在每次更新时检查Intersector类所有你想要碰到的东西的圈子,即

overlaps(Circle c, Rectangle r) 
overlaps(Circle c1, Circle c2) 

https://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Circle.html

https://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Intersector.html

看到这篇文章......

Circle and Polygon Collision with Libgdx