【问题标题】:Box2d dynamic body stuck to staticBox2d 动态体粘在静态上
【发布时间】:2012-01-04 04:10:07
【问题描述】:

有时,当动态体移动和碰撞静态体时,动态卡住并停止。

http://imageshack.us/photo/my-images/14/screenfgz.png/(上下线是传感器,中心形状是身体)

用于移动使用过的 mouseJoint->SetTarget(pos);

设置: 世界

b2Vec2 gravity = b2Vec2(0.f, 0.f);
bool doSleep = true;
world = new b2World(gravity, doSleep);
world->SetContinuousPhysics(false); // when using true, dynamic tunneling through other bodies

动态身体

...
density = 1.f;
friction = 0.f;
restitution = 0.f;
...
body->SetBullet(true);
body->SetFixedRotation(true);

鼠标连接

  b2Vec2 locationWorld = b2Vec2(pos.x/PTM_RATIO,pos.y/PTM_RATIO);
    b2MouseJointDef md;                
    md.bodyA = groundBody;
    md.bodyB = body;
    md.target = body->GetPosition();
    md.collideConnected = true;
    md.maxForce = 1000 * body->GetMass();
    md.dampingRatio = 0.1f;
    md.frequencyHz = 2.f;
    mouseJoint = (b2MouseJoint *)world->CreateJoint(&md);

动态和静态实体都是矩形。旋转 = 0。

如何去除粘连?

【问题讨论】:

    标签: iphone objective-c box2d


    【解决方案1】:

    如果您从屏幕截图中看到动态框卡在静态主体中的图块上,则这是目前 Box2D 中的一个已知问题。您可以通过对静态主体使用一个大多边形或一个环形来改进它,或者简单地对动态主体的角进行斜切,使它们不是完美的正方形。

    【讨论】:

    • 感谢您的信息!大量的形状对性能和内存有影响吗?你的意思是什么:“只是对动态主体的角进行斜切,使它们不是完美的正方形”?
    • 更多形状将使用更多内存并影响性能,但 Box2D 的碰撞检测例程非常好,所以我认为你需要有数千个或更多来担心普通 PC。斜面的意思是把角切掉一点,这样它就不是正方形了——把正方形变成八边形。这是因为它是方形的。
    【解决方案2】:

    解决方案: 使用边缘创建夹具(在动态和静态实体处)

    shape.SetAsEdge(b2Vec2(x,y),b2Vec2(x2,y2));
    bodyWall->CreateFixture(&shapeDef);
    
    instead
    
    shape.SetAsBox(width,height, b2Vec2(x,y),angle);
    

    【讨论】:

      猜你喜欢
      • 2012-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 2016-04-07
      • 1970-01-01
      • 2011-08-04
      相关资源
      最近更新 更多