2

ビューがlandscapeLeftにロックされたbox2dの世界があります。電話を左右に傾けて体を動かそうとしていますが、これは現在機能しています。携帯電話を横向きに傾けてレベルを開始すると問題が発生します。この状態では重力がかからなくなり、動いているはずの身体が静止している。これは摩擦の問題だと思います (移動する身体と​​移動するプラットフォームの両方が両方とも摩擦 0 ですが)、プラットフォームの反発を 1.0 に設定すると、身体は 1.0 にかかっているためです (つまり、身体は現在、ほとんどない) 重力は常に正しく適用されます。これは、ボディが移動するプラットフォームが 1 つしかないため、ボディがタイルの角で動かなくなるという 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);
4

1 に答える 1

0

この投稿の回答を見てください - Cocos2D ゲームでの加速度計ベースの動き

移動には cocos2D スプライトを使用し、スプライト位置の値を box2D ボディに使用するだけです。

于 2012-11-18T06:34:08.773 に答える