颤动时的Box2D仿真非常缓慢

问题描述

我正在重新编写一个使用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频道,我会尽力帮助您。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...