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 Joint 和 Simple Force Box2D 插件示例作为我的起点,事实证明这并不太难全部:
使用他们示例中的基本 Phaser/Box2D 设置(例如 800x600...),这里有一些代码可以放入 create
和 update
方法中。基本上我只是创建一个静态地面体,两个动态体:车和杆,然后使用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);
}
}
忽略通过在适当的时间提供适当的力来实际平衡杆的任务(这部分没问题),有人对如何在 Phaser 中设置 pole-balancing 的任务有一些基本指导吗?我也有 Phaser-based Box2D 插件,如果这样更容易的话。
基本上我正在寻找要创建的 objects 类型(例如,身体、关节)、creation/initialization 过程以及在任一方向施加力的过程。这些力一开始是不正确的对我来说并不重要,我只是不确定如何在 Phaser 中构建我想要的场景。
我的印象是这些事情在 Phaser 中应该很容易做到,但目前对我来说并不是这样。
使用 Revolute Joint 和 Simple Force Box2D 插件示例作为我的起点,事实证明这并不太难全部:
使用他们示例中的基本 Phaser/Box2D 设置(例如 800x600...),这里有一些代码可以放入 create
和 update
方法中。基本上我只是创建一个静态地面体,两个动态体:车和杆,然后使用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);
}
}