java - libGdx 多边形碰撞检测

标签 java android libgdx

最近开始学习LibGdx和Java,到目前为止进展顺利。 我遇到碰撞检测问题。

我有两个 Sprite ,它们可以表示为两种形状,一个多边形和一个圆形,它们会在任何给定时刻发生碰撞/相交。一旦这两个形状碰撞,就会触发一些东西。

到目前为止,这就是我所做的。它有点有效,但不准确。这是在 Render() 函数内部调用的:

   public boolean CollectPowerUp(PowerUps powerUp) {
        if (powerUp.position.dst(position) < Constants.PLAYER_HEIGHT -3) {
            Gdx.app.log("Collected PowerUp", "TRUE");
            EnablePowerUp(powerUp);
            return true;
        }
        return false;

我搜索了很多网站,大多数解决方案都包含其他软件,例如2DCube或PhysicsEditor。是否可以仅使用 LibGdx 和 Java 来执行此交集?如果是这样,我应该检查什么?

谢谢

最佳答案

Intersector 类具有许多可用于碰撞检测的静态方法。

如果您的多边形是矩形,您可以使用:

Intersector.overlaps(Circle c, Rectangle r)

其他

Polygon polygon=new Polygon();
polygon.setVertices(new float[]{0,0,.......});
Circle circle=new Circle(x, y, radius);

float points[]=polygon.getTransformedVertices();

for (int i=0;i<points.length;i+=2){
    if(circle.contains(points[i],points[i+1])){
        System.out.println("Collide");
    }
}       

编辑

上面的代码仅检测多边形顶点在圆内的碰撞,如果

  • 圆完全位于多边形内
  • 圆的某些部分在多边形内部,但顶点在圆外部

为圆创建一个多边形,在 View 中充当圆,在模型中充当多边形

float radius=100;
FloatArray floatArray=new FloatArray();
int accuracy=24;       // can be use 1 for complete circle

for (int angle=0;angle<360;angle += accuracy){
    floatArray.add(radius * MathUtils.cosDeg(angle));
    floatArray.add(radius * MathUtils.sinDeg(angle));
}

Polygon circle=new Polygon(floatArray.toArray()); // This is polygon whose vertices are on circumference of circle

float[] circularPoint=circle.getTransformedVertices();
for (int i=0;i<circularPoint.length;i+=2){
    if(polygon.contains(circularPoint[i],circularPoint[i+1])){
        System.out.println("Collide With circumference");
        break;
    }  
}

关于java - libGdx 多边形碰撞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45339068/

相关文章:

java - 应用 xss 跨站脚本编码 jsp/servlet 应用程序的有效方法

java - 对java对象的引用是如何实现的?

android - 如何在同一个 Activity onCreate() 中执行 WebView 和 ListView?

html - 如何在 Libgdx 中使 html5 全屏显示?

java - 保存/加载顺序随机生成的关卡

java - 多线程增加了我的矩阵乘法示例中的时间?

javascript - Android - 文本输入未使用自定义验证插件进行验证

java - 获取铃声 - 英文名称

java - 运行 libgdx 应用程序桌面和 Android

java.lang.可抛出的 : addInArray in RecyclerView