我正在创建一个包含一系列Box2D实体的绳索,其代码如下:
public void create(float length, float ropeLength){
Array<Body> bodies = new Array<Body>();
bodies.add(BodyFactory.createBox(world, position.x, position.y, length, length, BodyType.StaticBody, 0, 0, 0, "RopeMain"));
for(int i = 1; i < ropeLength; i++){
bodies.add(BodyFactory.createBox(world, position.x, position.y - (((length/2) / Core.PPM) * i),
length, length, BodyType.DynamicBody, 0, 0, 0, "RopeBody" + i));
RopeJointDef rDef = new RopeJointDef();
rDef.bodyA = bodies.get(i - 1);
rDef.bodyB = bodies.get(i);
rDef.collideConnected = true;
rDef.maxLength = (length/2)/Core.PPM;
rDef.localAnchorA.set(position.x, -((length / 2) / Core.PPM));
rDef.localAnchorB.set(position.x, ((length / 2) / Core.PPM));
world.createJoint(rDef);
}
}
请允许我分享一些参数......
对于BodyFactory.createBox
,它需要以下内容:
世界,xPos,yPos,宽度,高度BodyType,密度,摩擦力,恢复原状,夹具用户数据。(长度相同,因为它使用方框)
Core.PPM是每米像素。另请注意,位置在构造函数中被PPM分割。
问题:为什么以下几行向右拍?
任何信息都非常有用,密度,摩擦力和恢复力如何影响绳索?谢谢!
答案 0 :(得分:2)
联合localAnchor
与身体中心相对 并且不是绝对值。这意味着,如果要将关节设置为bodyA
的 center-bottom 和bodyB
的 center-top ,则需要使用< / p>
rDef.localAnchorA.set(0, -((length / 2) / Core.PPM));
rDef.localAnchorB.set(0, ((length / 2) / Core.PPM));