我在游戏画面的周边创建了链形状(静态物体),其尺寸为:
(2f*camera.viewportWidth,2f*camera.viewportHeight).
每个链形的密度为5f
。
我还创建了一个圆形(动态体)
density = 0.5f
friction = 0.25f
restitution =0.2f.
此外,我创建了一个多边形形状设置为盒形(动态体),它具有与圆形相同的密度,恢复和摩擦力。
世界的引力是(0,-5.8f)
。
所有形状都适当渲染。然而,盒子形状只是一直穿过位于屏幕底部的底链形状。圆形不会通过,但盒子形状确实通过。我不希望这种情况发生。盒子形状的大小是
(1.96f*camera.viewportWidth, 1.96f*camera.viewportHeight).
此身体的位置(盒子形状)设置为
(0.02f*camera.viewportWidth, 0.02f*camera.viewportHeight).
我不知道为什么箱子的形状会不断下降并且不会被底链形状阻挡,就像圆形的形状停止一样。谁能提供任何见解?
此外,我试图设置我的box2d世界的原因是当我使用camera.translate移动世界时消除一些相机滞后运动。我的想法是通过对其身体施加线性速度来移动盒子形状。请任何想法将不胜感激。
答案 0 :(得分:0)
您可能没有在这些灯具上设置filtering。看一下下面的例子
FixtureDef f = new FixtureDef();
f.density = density;
f.friction = friction;
f.restitution = restitution;
现在,如果您希望Box2D为您处理碰撞,您应该通过分配categoryBits
和maskBits
来判断它与哪个碰撞,并且您正在这样做:
f.filter.categoryBits = categoryBits; //who am I?
f.filter.maskBits = maskBits; //with who I will collide?
位应为short
类型且 2的幂 - 您不能将两个位定义为相同的值。您可以使用逻辑和(' | '运算符)设置多个maskBits。
public static final short BIT_F1 = 2;
public static final short BIT_F2 = 8;
public static final short BIT_F3 = 32;
FixtureDef f1, f2, f3;
//creating f1, f2, f3...
f1.filter.categoryBits = BIT_F1;
f2.filter.categoryBits = BIT_F2;
f3.filter.categoryBits = BIT_F3;
f1.filter.maskBits = BIT_F1; //now every body having f1 fixture will collide with another f1
f2.filter.maskBits = BIT_F1; //f2 will collide with f1
f3.filter.maskBits = (short)(BIT_F1 | BIT_F2 | BIT_F3); //f3 collides with everything
请注意,如果你想要夹具避免任何碰撞,你可以像sensor一样:
f.isSensor = sensor;
Here is link to official documentation虽然说实话并不是很有帮助。