Java JBox2D坐标Don';不匹配

Java JBox2D坐标Don';不匹配,java,jbox2d,Java,Jbox2d,在一个Jbox2D程序中,我创建了两个对象:一个是(0,10)米、10米宽、1米宽的矩形,一个是半径为0.5米的(1,0)球 //in RectangleObject Class PolygonShape cs = new PolygonShape(); cs.setAsBox(width, height); //In CircleObject Class CircleShape cs = new CircleShape(); cs.m_radius = radius; 当我的程序运行时

在一个Jbox2D程序中,我创建了两个对象:一个是(0,10)米、10米宽、1米宽的矩形,一个是半径为0.5米的(1,0)球

//in RectangleObject Class
PolygonShape cs = new PolygonShape();
cs.setAsBox(width, height);

//In CircleObject Class
CircleShape cs = new CircleShape();
cs.m_radius = radius;  
当我的程序运行时,球向平台移动并像我预期的那样击中矩形,但我得到的数字不是我预期的

BallX[0] : 1
BallY[0] : 7.9964995
RectX[0] : 1
RectY[0] : 10
如果X和Y是从球的中心计算的,则球应仅在Y=9.5时远离长方体0.5。即使使用直径,在Y=9时,距离也应最多为1米


有人知道为什么在半径只有0.5的情况下,Y的计算距离是2米吗?

多边形形状的参数是“半宽”和“半高”。这是box2d的一种奇怪的遗留物(参见手册),而不是最直观的行为。尝试:

cs.setAsBox(width / 2, height / 2);

它们在视觉上仍然不会发生碰撞,但在阅读手册时,我注意到了“皮肤”,这就是数字不完全正确的原因。据我所知,皮肤在形状表面周围为0.5f,通过将所有物体放大64倍,它们之间的小间隙也会膨胀,因此我必须在视觉上适应这种情况,因为现在所有物体都在正确碰撞。如果使用正确的尺寸,皮肤应该是不可感知的。默认蒙皮为0.01f(或1cm),因为多边形的X和Y坐标是中心,所以我应该能够将矩形绘制为drawRect(getX()-(getWidth()/2)、getY()-(getHeight()/2)、getWidth()、getHeight());但我得到的是:圆和矩形之间有一个小间隙。另外,这是缩放x10,而不是转换为像素坐标,我只是使用文字世界坐标,然后放大所有东西。我不知道发生了什么。世界坐标的差距有多大?我从我学到的东西中从头开始写了整件事,问题是什么?polygonShape.m_半径=0.5f,由于世界范围,这增加了一个巨大的边界。将此值更改为0.01f完全消除了该问题。谢谢你的帮助!