Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在jbox2d中从实体获取半宽半高_Java_Entity_Rectangles_Jbox2d - Fatal编程技术网

Java 如何在jbox2d中从实体获取半宽半高

Java 如何在jbox2d中从实体获取半宽半高,java,entity,rectangles,jbox2d,Java,Entity,Rectangles,Jbox2d,所以我有一个长方形的物体。如何获得它的半宽半高?(我在其他任何地方都找不到答案)不幸的是,它并不完全是直截了当的,因为Box2D(以及JBox2D)本身没有任何矩形的概念。矩形是一个PolygonShape,其形状可能是使用setAsBox(半宽半高)指定的 获取该半宽度和半高度 >创建夹具 >后,请考虑以下内容(请根据需要重新调整): public void checkout此夹具(夹具){ Shape fixtureShape=fixture.getShape(); if(多边形形状的fix

所以我有一个长方形的物体。如何获得它的半宽半高?(我在其他任何地方都找不到答案)

不幸的是,它并不完全是直截了当的,因为Box2D(以及JBox2D)本身没有任何矩形的概念。矩形是一个
PolygonShape
,其形状可能是使用
setAsBox(半宽半高)
指定的

获取该<代码>半宽度和半高度 >创建<代码>夹具 >后,请考虑以下内容(请根据需要重新调整):

public void checkout此夹具(夹具){
Shape fixtureShape=fixture.getShape();
if(多边形形状的fixtureShape实例){
多边形形状多边形形状=(多边形形状)固定形状;
Float minX=null;
Float maxX=null;
Float minY=null;
Float maxY=null;
对于(int i=0;imaxX){
maxX=x;
}
if(minY==null | | ymaxY){
maxY=y;
}
}
浮动宽度=最大值-最小值;
浮动高度=最大-最小;
浮动半宽度=宽度/2;
浮动半高=高度/2;
System.out.println(“多边形的半宽和半高为:“+halfWidth+”&“+halfHeight”);
}else if(圆形的固定形状实例){
浮动半径=((圆形)固定形状).m_半径;
System.out.println(“圆的半径为:“+半径”);
}否则{
//处理其他形状的TODO
}
}
要从
正文中获取此信息,请使用:

public void checkOutTheseFixtures(Body body) {
    for (Fixture fixture = body.getFixtureList(); fixture != null; fixture = fixture.getNext()) {
        checkOutThisFixture(fixture);
    }
}
还有一些测试:

World world = new World(new Vec2(0, 0), true);
Body body = world.createBody(new BodyDef());

// Add a circle
CircleShape circle = new CircleShape();
circle.m_radius = 20;
body.createFixture(circle, 5);

// Add a box
PolygonShape rectangle = new PolygonShape();
rectangle.setAsBox(137, 42);
body.createFixture(rectangle, 10);

// Add a more complex polygon
PolygonShape polygon = new PolygonShape();
Vec2[] vertices = new Vec2[5];
vertices[0] = new Vec2(-1, 2);
vertices[1] = new Vec2(-1, 0);
vertices[2] = new Vec2(0, -3);
vertices[3] = new Vec2(1, 0);
vertices[4] = new Vec2(1, 1);
polygon.set(vertices, 5);
body.createFixture(polygon, 10);

checkOutTheseFixtures(body);
印刷品:

多边形的半宽和半高分别为:1.0和2.5

多边形的半宽和半高分别为:137.0和42.0

该圆的半径为:20.0

希望有帮助


类似地,这里有一种简洁的方法来获取
多边形形状的尺寸:

public static Vec2 getDimensions(最终多边形形状){
float minX=float.MAX_值;
float maxX=float.MIN_值;
float minY=float.MAX_值;
浮点最大值=浮点最小值;
最终int顶点=shape.getVertexCount();
对于(int i=0;i<顶点;i++){
最终vec2v=shape.getVertex(i);
minX=(v.xmaxX)?v.x:maxX;
minY=(v.ymaxY)?v.y:maxY;
}
返回新的Vec2(maxX-minX,maxY-minY);
}
将返回的
Vec2
的维度一分为二也将检索所需的值