【问题标题】:Box2D emulation on flutter painfully slow颤振上的 Box2D 仿真非常缓慢
【发布时间】:2020-09-14 23:55:53
【问题描述】:

我正在重写一个使用 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 等,但它似乎只是穿过静态物体(地板)。

【问题讨论】:

    标签: flutter dart box2d game-physics flame


    【解决方案1】:

    由于您的正方形的密度为 0,因此不受重力影响,请尝试将其设置为更高的值,看看对象是否受到更大的影响。

    如果你真的不需要,不要使用body.setTransform,因为它会破坏世界上的物理设置。

    你试过这个例子吗? https://github.com/flame-engine/flame/tree/master/doc/examples/box2d/contact_callbacks

    并且不要忘记将scale 参数添加到您的世界,否则您会很快达到速度限制,因为您会被缩小。

    我是 box2d for flame(现为 Forge2D)的维护者,如果您有更多问题,可以加入我们 discord 上的 box2d 频道,我会尽力为您提供帮助。

    【讨论】:

    • 感谢您的反馈,即使我将密度设置得更高,这也不会影响下落速度......我摆弄了这些类型的设置进行实验,我也知道变换会导致问题docs,但我将其设置为查看帧速率是否缓慢或 box2d 计算,我注意到它在 repo 中使用了“视口”,我会对此进行调查并再次感谢您的回答...我可以发给您吗我的代码..它正在进行中。
    • 只是一个快速更新......你提供的链接对我帮助很大......正是我正在寻找的我根本没有使用规模......在新项目中启动该代码时调整重力等有理想的效果。我将解决方案标记为已解决。我加入了不和谐,也很高兴能互动。
    猜你喜欢
    • 2018-10-19
    • 2010-10-24
    • 1970-01-01
    • 2014-06-09
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多