Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 连接两个Box2d实体_C++_Cocos2d Iphone_Box2d - Fatal编程技术网

C++ 连接两个Box2d实体

C++ 连接两个Box2d实体,c++,cocos2d-iphone,box2d,C++,Cocos2d Iphone,Box2d,我正在创建一个应用程序,在这个应用程序中,我试图将两个身体连接在一起,这样当我移动一个身体时,第二个身体应该在第一个身体内移动 以下是我创建主体的代码: - (b2Body *)addBoxBodyForDynamicSprite:(CCSprite *)sprite { b2BodyDef spriteBodyDef; spriteBodyDef.type = b2_dynamicBody; //spriteBodyDef.position.Set(sprit

我正在创建一个应用程序,在这个应用程序中,我试图将两个身体连接在一起,这样当我移动一个身体时,第二个身体应该在第一个身体内移动

以下是我创建主体的代码:

    - (b2Body *)addBoxBodyForDynamicSprite:(CCSprite *)sprite {

    b2BodyDef spriteBodyDef;
    spriteBodyDef.type = b2_dynamicBody;
    //spriteBodyDef.position.Set(sprite.position.x/PTM_RATIO, sprite.position.y/PTM_RATIO);
    CGPoint asolutePoint = [sprite.parent convertToWorldSpace:sprite.position];
    spriteBodyDef.position.Set(asolutePoint.x/PTM_RATIO, asolutePoint.y/PTM_RATIO);
    spriteBodyDef.userData = (__bridge void*)sprite;
    b2Body *spriteBody = world->CreateBody(&spriteBodyDef);

    b2PolygonShape spriteShape;
    spriteShape.SetAsBox(sprite.contentSize.width/PTM_RATIO/2,
                         sprite.contentSize.height/PTM_RATIO/2);
    b2FixtureDef spriteShapeDef;
    spriteShapeDef.shape = &spriteShape;
    spriteShapeDef.density = 0.3;
    spriteShapeDef.isSensor = true;
    spriteBody->CreateFixture(&spriteShapeDef);

    return spriteBody;
}
一个物体是运动的,另一个物体是动态的。我使用以下方法移动这些物体:

theBody->SetTransform(locationWorld, theBody->GetAngle());
如果我在这里施加线性力,物体不会移动&我用来固定它们的关节是
b2WeldJoint

b2JointDef jointDef;
    jointDef.bodyA = another;
    jointDef.bodyB = leftHandFixBody;
    aJoint = (b2Joint *)world->CreateJoint(&jointDef);

它移动动力学实体,但运动学实体仍保持在其位置上。我想把两具尸体移到一起。任何帮助都将不胜感激。谢谢

此外,根据手册,运动物体的移动是通过设置其速度,而不是通过施加力

运动体根据其速度在模拟下移动。 运动学体不响应力。它们可以手动移动 由用户操作,但通常通过设置其 速度运动物体的行为就好像它有无限的质量, 但是,Box2D为质量和反向质量存储零。 运动学实体不会与其他运动学或静态实体碰撞

此外,我还发现使用SetTransform(…)来移动实体的效果较差。我用它创建了一个门户,将一个身体从一个地方跳到另一个地方,这很有效。但是如果我每一个模拟周期都更新它,物体就会停止与其他物体碰撞。这只是一个警告


这有帮助吗?

此外,根据手册,运动物体的移动是通过设置其速度,而不是通过施加力

运动体根据其速度在模拟下移动。 运动学体不响应力。它们可以手动移动 由用户操作,但通常通过设置其 速度运动物体的行为就好像它有无限的质量, 但是,Box2D为质量和反向质量存储零。 运动学实体不会与其他运动学或静态实体碰撞

此外,我还发现使用SetTransform(…)来移动实体的效果较差。我用它创建了一个门户,将一个身体从一个地方跳到另一个地方,这很有效。但是如果我每一个模拟周期都更新它,物体就会停止与其他物体碰撞。这只是一个警告


这有用吗?

这里有很多提示。避免使用指针,你的生活就像C++程序员一样容易。运动体有无限的动量,所以它们不会对力或冲动作出反应。可以使用SetLinearVelocity移动它们。(@Manu这完全无关,甚至不是真的。)@iforce2d谢谢你的回复。我已经尝试过SetLinearveLocation,但它不会移动任何物体。主体->设置线性位置(locationWorld);嗯,应该是这样。确保同时调用步骤()来更新世界,并且渲染是正确的。您可以检查GetLinearVelocity()的值,以查看速度是否按预期设置。相关:这里有很多指针。避免使用指针,你的生活就像C++程序员一样容易。运动体有无限的动量,所以它们不会对力或冲动作出反应。可以使用SetLinearVelocity移动它们。(@Manu这完全无关,甚至不是真的。)@iforce2d谢谢你的回复。我已经尝试过SetLinearveLocation,但它不会移动任何物体。主体->设置线性位置(locationWorld);嗯,应该是这样。确保同时调用步骤()来更新世界,并且渲染是正确的。您可以检查GetLinearVelocity()的值,以查看速度是否设置为预期值。相关: