【问题标题】:Chain Shape Collision链形碰撞
【发布时间】:2013-07-30 17:12:34
【问题描述】:

我正面临使用链形的新问题。两个链状体之间的碰撞并没有像正常体那样发生。所以这是正常行为还是我为此做错了什么?

以下是用于此目的的代码。

        ChainShape mChainShape = new ChainShape();
        Vector2[] mVector2 = new Vector2[lineList.size()];

        for (int i = 0; i < lineList.size(); i++) {
                mVector2[i] = new Vector2(lineList.get(i).getX1()
                                / PhysicsConstants.PIXEL_TO_METER_RATIO_DEFAULT,
                                lineList.get(i).getY1()
                                / PhysicsConstants.PIXEL_TO_METER_RATIO_DEFAULT);
        }

        mChainShape.createChain(mVector2);
        FixtureDef mFixtureDef = new FixtureDef();
        Body mChainBody;
        BodyDef mBodyDef = new BodyDef();
        mBodyDef.type = BodyType.DynamicBody;
        mChainBody = mPhysicsWorld.createBody(mBodyDef);
        mFixtureDef.shape = mChainShape;
        mFixtureDef.density = 1f;
        mFixtureDef.friction = 0.5f;
        mFixtureDef.restitution = 0.5f;
        mChainBody.createFixture(mFixtureDef);
        mChainShape.dispose();

如果我想根据触摸坐标创建身体,那么这件事可能吗?

请在这方面给予任何指导。

【问题讨论】:

  • 链/线几何不能与链/线几何发生碰撞。不支持。试试看是否可以在动态物体上使用细长的矩形。
  • 如果我决定基于触摸创建多边形形状,那么如何创建呢?
  • 这不好回答。但是如果你有动态链形状,那么你需要有实体形状才能与它们碰撞。例如在许多情况下,您需要凸分解。
  • 我认识我的朋友,但我只想要关于实施的概念。对我来说,只有一个建议就足够了。
  • 当然,您需要使用更具体的语言。 “基于触摸坐标创建身体”是什么意思?创建一个代表什么的身体?界线?你的触摸所包围的形状?你知道,并不是所有的接触都会回到起点。你打算怎么处理?

标签: box2d andengine physics-engine


【解决方案1】:

BOX 2D 不支持链形碰撞。

但如果您的身体是多边形,您可以为此创建一个三角形近似值,并从 b2PolygonShape 组成您的身体。

b2Vec2 triVerts[3];
// for this example polygon should have "center" point, from that it can be observed around. 
triVerts[0] = b2Vec2(0,0); // center
for(int idx = 1; idx < lineList.size(); idx++)
{
    b2PolygonShape triangle;
    fixtureDef.shape = &triangle;
    // Assumes the vertices are going around
    triVerts[1] = mVector2[idx-1];
    triVerts[2] = mVector2[idx];
    triangle.Set(triVerts,3);
    mChainBody.CreateFixture(&fixtureDef);
}

对于 b2PolygonShape 碰撞可以正常工作。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2023-03-16
  • 2014-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-07
  • 2016-11-27
相关资源
最近更新 更多