在没有重力的情况下将对象移动到iPhone中的box2d中

时间:2011-03-10 18:44:55

标签: iphone cocos2d-iphone box2d

我使用下面的代码将我的Box2D对象移动到屏幕中,但由于我的世界或其他东西的重力,我不知道为什么我的对象被迫向下移动,我是box2d的新手。

我想在没有重力的情况下将我的物体移动到整个世界。

-(void) tick:(NSTimer *)timer {

    int32 velocityIterations = 8;
    int32 positionIterations = 1;
    world->Step(1.0f/60.0f, velocityIterations, positionIterations);

    for (b2Body* b = world->GetBodyList(); b; b = b->GetNext())
    {
        if (b->GetUserData() != NULL)
        {
            UIView *oneView = (UIView *)b->GetUserData();
            CGPoint newCenter = CGPointMake(b->GetPosition().x * PTM_RATIO,self.view.bounds.size.height - b->GetPosition().y * PTM_RATIO);
            oneView.center = newCenter;
            CGAffineTransform transform = CGAffineTransformMakeRotation(- b->GetAngle());
            oneView.transform = transform;
        }
    }
}

我的加速度计代码如下。

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
    b2Vec2 gravity;
    gravity.Set( acceleration.x * 1.81,  acceleration.y * 1.81 );
    world->SetGravity(gravity);
}

如果有人解决,请求。

感谢。

1 个答案:

答案 0 :(得分:2)

据我所知,你想移动你的对象设置它的位置。这是一个坏主意,因为它将提供与您的对象碰撞的物体的非物理行为。那是因为如果你只改变你身体的位置,物理引擎的速度仍然是零,并且会根据物体的零速度处理碰撞。

更好的解决方案是为对象使用b2_kinematicBody类型。然后你将能够控制它的运动,指定它的速度矢量,物理将按预期运行。由于它的类型,重力(并没有其他力)也不会应用于你的对象。

修改

//creation
b2BodyDef bDef;
bDef.type = b2_kinematicBody;
bDef.position.Set(5, 6);

b2Body *body  = physWorld->CreateBody(&bDef);


//control
body->SetLinearVelocity(b2Vec2(3, 4));