【问题标题】:Confilicting behavior between dynamic and static bodies in Box2dBox2d 中动态和静态实体之间的冲突行为
【发布时间】:2016-04-07 00:16:01
【问题描述】:

我在游戏屏幕周围创建了链形(静态物体),其尺寸为:

    (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). 

这个body(box shape)的位置设置为

    (0.02f*camera.viewportWidth, 0.02f*camera.viewportHeight). 

我不知道为什么盒子形状一直掉下来并且没有被底部的链条形状阻止,就像圆形被阻止一样。任何人都可以提供任何见解吗?

另外,我尝试像这样设置我的 box2d 世界的原因是为了在我使用 camera.translate 在世界各地移动时消除一些相机滞后运动。我的想法是通过对它的身体应用线速度来移动盒子的形状。请任何想法将不胜感激。

【问题讨论】:

    标签: java android libgdx box2d physics


    【解决方案1】:

    您可能没有在这些灯具上设置filtering。看看下面的例子

        FixtureDef f = new FixtureDef();
    
        f.density = density;
        f.friction = friction;
        f.restitution = restitution;
    

    现在,如果您希望 Box2D 为您处理碰撞,您应该告诉它哪个装置将与哪个装置发生碰撞,并且您正在通过分配 categoryBitsmaskBits 来执行此操作,如下所示:

        f.filter.categoryBits = categoryBits; //who am I?
        f.filter.maskBits = maskBits;         //with who I will collide?
    

    位应该是short 类型和二的幂 - 您不能将两个位定义为相同的值。您可以使用逻辑和('|' 运算符)设置多个 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虽然说实话没有多大帮助。

    【讨论】:

    • 我尝试添加 maskbits 和 categorybits,但没有成功。由于重力,世界上的大多数结构都在倒塌。 @m.antkowicz
    • 你说圆不通过链形——盒子的夹具设置和圆一模一样吗?
    • 是的,它的设置就像圆形夹具@m.antkowicz
    • 如果可能,请在您遇到此正文问题时发布您屏幕的整个代码(使用pastebin.com 或仅对您的问题进行编辑)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多