如何“自动”将重力添加到多个物体?

时间:2017-06-07 19:43:14

标签: javascript game-physics gravity rigid-bodies

我知道如何将重力添加到任何给定的对象/元素。只需向下添加加速度Y.但是“如果我想让我的英雄飞行会怎样?”或“如果我想为一个特定物体关闭重力怎么办?我必须设置{{1}这显然会为每个人关闭。我也认为给每个形状都有他们自己的“引力”变量,但我认为那太多了,而且可能不是它的完成方式......

我如何创建形状

(使用EaseJS)

gravity = 0

自动添加重力? (每个形状继承向下加速)我知道有2D物理引擎,但我想自己做/了解,我确实尝试使用PhysicsJS但没有这样做..我可能会使用引擎但是现在我想知道怎么做:P

2 个答案:

答案 0 :(得分:0)

您可以创建一个对象:

function Shape(x, y, w, h, gravity){
    this.x = x;
    this.y = y;
    this.w = w;
    this.h = h;
    this.gravity = gravity;
    this.shape = new createjs.Shape();
    stage.addChild(shape);
    this.draw = function(){
        shape.graphics.beginFill("black").drawRect(x, y, w, h);
    }
}

因此,您可以将其命名为:

> x = new Shape(200, 200, 10, 10, 0.5)
Shape {x: 200, y: 200, w: 10, h: 10, gravity: 0.5}
> y = new Shape(400, 100, 50, 100, 0.75)
Shape {x: 400, y: 100, w: 50, h: 100, gravity: 0.75}
> x.gravity = 0
0
> y.gravity
0.75

我还没有与EaseJS合作,所以细节可能不准确,但总体逻辑如上所示。

答案 1 :(得分:0)

我想您了解如何添加重力或不向对象添加重力。正如你所说,它只是将加速度Y添加到对象中。

听起来你只需要稍微考虑一下你的设计。假设你有一个模块'gravity.js'负责将重力应用于对象。

/* gravity.js */
const DEFAULT_GRAVITY_ACCELERATION = 1.0;

function applyGravity(shape) {
  const gravity = shape.gravityAcceleration !== undefined ?
    shape.gravityAcceleration : DEFAULT_GRAVITY_ACCELERATION;

  //Do whatever you normally do to update Y acceleration. Code below
  //is just an example.
  shape.addYAcceleration(gravity);
}

如果您在某个地方创建一个形状并希望它没有重力,只需设置该对象的.gravityAcceleration成员即可。顺便说一下,“gravityAcceleration”这个名字没什么特别的 - 它可以是你想要的任何东西。

//Assuming spawnShape returns an object.
var superman = spawnShape(20, 250, 600, 30); 
superman.gravityAcceleration = 0; //Override the default gravity.

您只需为不受重力影响的形状对象设置.gravityAcceleration成员。