1

我有一个 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 对象。

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

有什么建议么

谢谢

4

1 回答 1

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));
于 2013-07-27T16:38:57.477 回答