问题描述
我正在重新编写一个使用easlejs和Box2Dweb制作的游戏,该游戏使用Box2d的飞镖端口来扑打火焰引擎。我的问题是对象移动的速度非常慢。重力设置似乎以线性方式进行。
我了解了比例因子等...只是不知道如何链接所有这些。世界一流的没有 有人可以向我展示如何设置初始屏幕与Box2d世界比例的示例吗? 我通过使用FlamesResize覆盖获得了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等,但是它似乎只是在静态物体(地板)上移动。
解决方法
由于正方形的密度为0,因此不受重力影响,请尝试将其设置为更高的值,看看对象是否受到更大的影响。
如果不需要的话,请不要使用body.setTransform
,因为它会破坏世界上建立的物理原理。
您尝试过此示例吗? AngularJS - hide/show div if date is within last 6 months
我是box2d的维护者,如果您还有其他问题,可以加入我们https://github.com/flame-engine/flame/tree/master/doc/examples/box2d/contact_callbacks的box2d频道,我会尽力帮助您。