重力和错误的大小

时间:2015-02-17 11:06:50

标签: java android libgdx box2d

box2d出现问题。我想补充已经存在的游戏物理,但遇到了问题。首先,我用计算绘制的游戏世界

public Hero(float x, float y, int width, int height) {
    this.width = width;
    this.height = height;

    position = new Vector2(x, y);
    velocity = new Vector2(0, 0);
    acceleration = new Vector2(0, -420);
}

public void update(float delta){
    velocity.mulAdd(acceleration, delta);

    if(velocity.y < -200){
        velocity.y = -200;
    }

    position.mulAdd(velocity,delta);
}

public void onTap(){
    velocity.y = 140;
}

英雄的身体从标准设置下降,但我添加到测试中的身体框表现得非常奇怪。

问题编号1.为什么box2d框比使用此设置的英雄更多,但是当我除以2时,它变得类似于英雄的纹理大小?可以将这样的效果联系起来,以便根据所有方向的中心绘制身体2.为什么世界上有重力-420的身体以相同的速度连续下降,但不如我的英雄那么多。如何实现类似的效果呢?

    hero = new Hero(30, midPointY, 18, 21);
    hero1 = new Box2Dhero(world, 90, midPointY, 18, 21);

它的box2d英雄构造函数

  public Box2Dhero(World world, float x, float y, int width, int height ) {

    bodyDef = new BodyDef();
    bodyDef.position.set(x,y);
    bodyDef.type = BodyDef.BodyType.DynamicBody;
    body = world.createBody(bodyDef);

    box = new PolygonShape();
    box.setAsBox(width,height);
    fixtureDef = new FixtureDef();
    fixtureDef.shape = box;
    body.createFixture(fixtureDef);
}

我的GameWorld大小

 float screenWidth = Gdx.graphics.getWidth();
 float screenHeight = Gdx.graphics.getHeight();
 float gameHeight = 385;
 float gameWidth = screenWidth / (screenHeight / gameHeight);

1 个答案:

答案 0 :(得分:0)

  1. 您对基于所有方向单位长度的中心的方框的观察是正确的。

    它会影响你的比较,因为box2d的盒子和你的盒子的起源不匹配。这种影响应该相对较小。

    • 您将速度沿y方向夹紧到-200。做出这样的假设可能不是一个比较好的主意。查找关于box2d做什么的资源将是一个好主意(也许来源)。
    • 大多数物理引擎执行统一时间步进为deterministic。 Box2D就是其中之一。您可以阅读统一时间步进here
  2. 可能会有更多差异/优化,从源头上看,比较对我来说是最有效的解决方案。

    祝你好运。