2012-11-17 59 views
2

我有一个box2d世界,视图锁定在landscapeLeft中。我正尝试通过向左或向右倾斜手机来移动身体,该手机正在工作。当水平仪开始使用landscapeRight倾斜的手机时,我遇到问题。在这种情况下,重力不再被施加,我应该移动的身体静止不动。我相信这是一个摩擦问题(即使我的身体移动和移动的平台都是0摩擦),因为当我设置恢复平台时,我的身体停留在1.0(所以我的身体现在正在绑定一个很少到位),重力始终正确应用。这不是box2d问题,因为我的身体只有一个平台可以继续前进,而且无论平台上的位置如何,它都不会移动,因为body2卡在角落的瓷砖上。这里是我的加速代码。box2d重力不在应用

- (void)accelerometer:(UIAccelerometer*)accelerometer didAccelerate (UIAcceleration*)acceleration 
{ 
    if (acceleration.x < 0) { 
     b2Vec2 gravity(-acceleration.y * 15, -8); 
     world->SetGravity(gravity); 
    } 
} 

这里是我的初始化代码在这个岗位

// Define the gravity vector. 
    b2Vec2 gravity; 
    gravity.Set(0.0f, -10.0f); 

    // Do we want to let bodies sleep? 
    // This will speed up the physics simulation 
    bool doSleep = true; 

    // Construct a world object, which will hold and simulate the rigid bodies. 
    world = new b2World(gravity, doSleep); 

    world->SetContinuousPhysics(true); 
+0

你在创建b2World()时将引力初始化为什么? – Bovinedragon

+1

身体是否睡着了?改变引力不会唤醒它,你需要SetAwake(true)。 – iforce2d

+0

身体已经睡着了! SetAwake(true)解决了我的问题,用它来回答我的问题,我会接受它。这里有一些关于其他用户睡觉的信息。当Box2D确定一个身体(或一组身体)已经停止时,身体进入睡眠状态,CPU的开销很小。如果身体清醒并与睡觉的身体发生碰撞,那么睡觉的身体会醒来。如果连接到他们的联合或联系被破坏,身体也会醒来。您也可以手动唤醒身体。 – FierceMonkey

回答