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 などを増やしましたが、静的なボディ (床) を通り抜けているように見えます。