【问题标题】:Box2d/LibGDX: Rotate fixture along sprite's origin. See illustrationBox2d/LibGDX:沿着精灵的原点旋转夹具。见插图
【发布时间】:2017-02-24 10:13:46
【问题描述】:

如果我applyAngularImpulse 到这个圆形精灵的身体,它会沿着它的中心旋转,这就是我想要发生的事情。但是它的碰撞遮罩装置(绿色)沿着它自己的中心而不是精灵的中心旋转。我怎样才能让它也沿着精灵的中心旋转,以便碰撞蒙版和精灵保持同步?

例如,在下图中,当圆圈旋转并且红色部分移动到左上角时,我希望绿色碰撞蒙版位于位置 #3。但是#2发生了。我知道为什么会发生这种情况,但我怎样才能在这里实现我想要实现的目标?

【问题讨论】:

    标签: libgdx box2d


    【解决方案1】:

    您需要创建两个夹具 - 一个是精灵大小(并且精灵应该以该夹具为中心),第二个移动到圆的边缘(您当前的碰撞夹具)

    BodyDef bodyDef;
    
    ...
    
    Body body = world.createBody(bodyDef);
    
    FixtureDef circleFixture = new FixtureDef();
    FixtureDef collisionFixture = new FixtureDef();
    
    CircleShape circle = new CircleShape();
    circle.setRadius(spriteRadius);
    circleFixture.shape = circle;
    
    //same for collision fixture with proper shape - (0,0) i a center of circle
    float[] vertices = new float[]{x1, y1, x2, y2...};
    
    ChainShape chain = new ChainShape();
    chain.createLoop(vertices);
    fixtureDefs.peek().shape = chain;
    

    现在,如果您需要将碰撞夹具保持在圆的边缘,只需定义将其放置在那里的点 - 例如半径为 2 顶点的圆

    {5, -1, 6, 0, 5, 1, 4, 0}
    

    会给出类似的东西

    旋转后它应该表现得像

    当然,您需要在圆形夹具的中心渲染您的精灵

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-04
      • 2014-09-02
      • 2014-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多