当重力拉动y轴时,沿x轴移动box2d对象

时间:2013-07-27 16:12:45

标签: cocos2d-iphone box2d box2d-iphone

我有一个box2d对象正在通过重力移动到屏幕上

int32 velocityIterations = 6;
int32 positionIterations = 2;

self.world->Step(dt, velocityIterations, positionIterations);
self.world->ClearForces();

for(b2Body *b = self.world->GetBodyList(); b; b=b->GetNext()) {
    if (b->GetUserData() != NULL) {

        id object = (id)b->GetUserData();

        if([object isKindOfClass:[FallingObject class]])
        {
            CCSprite *sprite = (CCSprite *)b->GetUserData();
            sprite.position = CGPointMake(b->GetPosition().x * PTM_RATIO, b->GetPosition().y * PTM_RATIO);
            sprite.rotation = -1 * CC_RADIANS_TO_DEGREES(b->GetAngle());
        }
    }
}

当用户在屏幕上向左或向右移动手指时,我想在对象仍在屏幕上移动时向左或向右移动box2d对象。

任何人都可以建议最好的方法来做到这一点。我试过应用线速度,但它似乎只是拍摄屏幕。

任何建议

由于

1 个答案:

答案 0 :(得分:2)

有一些方法可以做到这一点,你需要为你的情况尽力而为。

您可以手动为X参数施加力,冲动或改变体速:

// x axis force
b2Vec2 xAxisForce = b2Vec2(10, 0);

// Try one of these
b->ApplyForce(xAxisForce, b->GetWorldCenter());
b->ApplyForceToCenter(xAxisForce);
b->ApplyLinearImpulse(xAxisForce, b->GetWorldCenter());

// Or change the body velocity manually
b->SetLinearVelocity(b2Vec2(10, b->GetLinearVelocity().y));