Phaser (Box2D) 中的基本 2D pole-balancing 设置

Basic 2D pole-balancing setup in Phaser (Box2D)

忽略通过在适当的时间提供适当的力来实际平衡杆的任务(这部分没问题),有人对如何在 Phaser 中设置 pole-balancing 的任务有一些基本指导吗?我也有 Phaser-based Box2D 插件,如果这样更容易的话。

基本上我正在寻找要创建的 objects 类型(例如,身体、关节)、creation/initialization 过程以及在任一方向施加力的过程。这些力一开始是不正确的对我来说并不重要,我只是不确定如何在 Phaser 中构建我想要的场景。

我的印象是这些事情在 Phaser 中应该很容易做到,但目前对我来说并不是这样。

使用 Revolute JointSimple Force Box2D 插件示例作为我的起点,事实证明这并不太难全部:

使用他们示例中的基本 Phaser/Box2D 设置(例如 800x600...),这里有一些代码可以放入 createupdate 方法中。基本上我只是创建一个静态地面体,两个动态体:车和杆,然后使用revoluteJoint方法将两个动态体连接在一起。

function create() {

    // Enable Box2D physics
    game.physics.startSystem(Phaser.Physics.BOX2D);
    game.physics.box2d.debugDraw.joints = true;
    game.physics.box2d.setBoundsToWorld();
    game.physics.box2d.gravity.y = 500;

    ground = new Phaser.Physics.Box2D.Body(this.game, null, game.world.centerX, 575, 0); // game, sprite, cx, cy, density [static/kinematic/dynamic], world
    ground.setRectangle(800, 50, 0, 0, 0); // width, height, offsetx, offsety, angle (rads)

    cart = new Phaser.Physics.Box2D.Body(this.game, null, game.world.centerX, 543);
    cart.setRectangle(60, 10, 0, 0, 0);
    cart.mass = 1;

    pole = new Phaser.Physics.Box2D.Body(this.game, null, game.world.centerX, 495);
    pole.setRectangle(4, 100, 0, 0, 0);
    pole.mass = 0.1;
    pole.linearDamping = 4; // makes the pole fall slower (heavy air resistance)

    //bodyA, bodyB, ax, ay, bx, by, motorSpeed, motorTorque, motorEnabled, lowerLimit, upperLimit, limitEnabled
    game.physics.box2d.revoluteJoint(cart, pole, 0, -5, 0, 50);

    pole.angle = 5; // so it starts out falling to the right

    //Set up arrow keys for input
    cursors = game.input.keyboard.createCursorKeys();

    // track the angle of the pole

    game.add.text(5, 5, 'Pole balancing.', { fill: '#ffffff', font: '14pt Arial' });
    caption1 = game.add.text(5, 30, 'Angle: ' + pole.angle, { fill: '#dddddd', font: '10pt Arial' });
}

function update() {

    caption1.text = 'Angle: ' + pole.angle;

    if (cursors.left.isDown) {
        cart.applyForce(-5,0);
    }

    if (cursors.right.isDown) {
        cart.applyForce(5,0);
    }
}