我正在重写一个使用 easlejs 和 Box2Dweb 制作的游戏,以使用 box2d 的 dart 端口来扑动火焰引擎。我的问题是物体移动真的很慢。重力设置似乎以线性方式进行。
我读到了比例因子等......只是不知道如何将它们联系起来。世界级没有那个,有人可以告诉我一个如何设置初始屏幕到 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 等,但它似乎只是穿过静态物体(地板)。