2

Box2Dweb で easlejs を使用して作成したゲームを、box2d のダーツ ポートで flutter のフレーム エンジンに書き直しています。私の問題は、オブジェクトの動きが非常に遅いことです。重力設定は直線的に進行するようです。

スケールファクターなどについて読みました...すべてをリンクする方法がわかりません。World クラスにはそれがありません。最初の画面と box2d の世界の比率を設定する方法の例を教えてもらえますか? フレームのサイズ変更オーバーライドを使用してscreenSizeを取得します。これを使用して、スケールなどを設定します。

GitHub の例では、それを使用しているようには見えず、ダウンロードして実行しても、体の落下が非常に遅くなります。

円または四角形が (正しく) 落ちている単純な画面が高く評価されます。コードをインスタンス化する方法は次のとおりです。(オブジェクトは 80x80 ピクセルにする必要があります)

class MyGame extends Game with TapDetector {
    MyGame() : _world = Box2D.World.withGravity(Box2D.Vector2(0, 10)) {
        _world.setAllowSleep(true);
        spawnBlocks();
    }

    void createSquare(int index, double w, double h, double x, double y) {
        int randomNumber = random.nextInt(letters.length);
        var bodyDef = Box2D.BodyDef();
        bodyDef.type = Box2D.BodyType.DYNAMIC; 
        bodyDef.position = Box2D.Vector2(x - 5, y); 
        bodyDef.angle = 0; 
        dynamicBody = _world.createBody(bodyDef); 
    
        dynamicBody.userData = letters[randomNumber];
        var boxShape = Box2D.PolygonShape();
        boxShape.setAsBox(w / 2, h / 2, Box2D.Vector2(w / 2, -h * 2), 0);

        var boxFixtureDef = Box2D.FixtureDef();
        boxFixtureDef.shape = boxShape;

        boxFixtureDef.density = 0;
        boxFixtureDef.restitution = 0;
        boxFixtureDef.friction = 1;
        dynamicBody.createFixtureFromFixtureDef(boxFixtureDef);

        blocks.add(dynamicBody);
  }

  spawnBlocks() {
      for (var i = 0; i < 8; i++) {
        createSquare(
          i, blockWidth, blockHeight, blockWidth * i + 18, -100 * i.toDouble());
      }
  }
}

重力をどれだけ高く設定しても、本体は同じ速度で落下します。床にぶつかっても非常にゆっくりと跳ね返ります。body.setTransform を使用して position.y などを増やしましたが、静的なボディ (床) を通り抜けているように見えます。

4

1 に答える 1