【问题标题】:Jbox2D problems with fixtureJbox2D 夹具问题
【发布时间】:2013-09-03 12:36:06
【问题描述】:

我昨天刚开始在我的游戏中使用 jbox2d,我目前遇到了一些问题,我找不到解决这些问题的方法。我有许多静态物体和一个动态物体(即玩家),我想模拟碰撞。

基本上,只要调用 world.step 方法,我的动态体就会从 x 轴和 y 轴上的原始位置(从 18.0 到 19.25 和从 26.0 到 70.76 。我尝试打印其他所有内容(位置静态物体和动态物体的运动),这是正确的。

虽然它与重力有关(我不需要),但是在我将世界和动态主体设置为 0.0f 后,它仍然会出现同样的问题。我发现问题是我的动态实体的固定装置(如果我删除它,问题就不会再发生了)

身体和动态实体的移动也略有不同(以像素为单位,所以我猜我的 setLinearVelocity 方法可能是错误的)

我该如何解决这个问题以及这些问题是什么?

这是我的代码(我避免无用的东西,我只保留那些与 jbox2d 相关的东西):

Map 类,其中包含游戏的地图。

//fields
Code:
public static final float METER_IN_PIXELS = 40.0f;
private World world;
...



//constructor
Code:
public Map(int startPosX, int startPosY)
{
   world = new World(new Vec2(0,10.0f));
   ...
}


//called every 33ms
Code:
public void update(int delta)
{
   world.step(1/60.0f, 8, 3);
   player.update(delta); // to update the player's movement
        ...
}

PhysicsMovingEntity 所有移动实体使用的类(目前它仅由玩家扩展

//fields
Code:
private Body body;
private float physicsX;
private float physicsY;

//constructor

public PhysicsMovingEntity(float x, float y, World world)
Code:
{
   super.setX(x);
   super.setY(y);
   physicsX = x / Map.METER_IN_PIXELS;
   physicsY = y / Map.METER_IN_PIXELS;
   initPhysicalBody(world);
}


//init method

Code:
public void initPhysicalBody(World world)
{
   BodyDef bd = new BodyDef();
   bd.type = BodyType.DYNAMIC;
   bd.position.set(physicsX, physicsY);
   bd.gravityScale = 0;
   PolygonShape ps = new PolygonShape();
   ps.setAsBox(getFrameSize().width() / Map.METER_IN_PIXELS, getFrameSize().height() / Map.METER_IN_PIXELS);
   FixtureDef fd = new FixtureDef();
   fd.density = 1;
   fd.shape = ps;
   body = world.createBody(bd);
   [color=#FF4000]body.createFixture(fd);[/color] // this toggles the problem
}


//called every 33ms
Code:
public void update(int delta) 
{
   super.update(delta);
   [color=#FF4000]body.setLinearVelocity(new Vec2(getLastDirection().getX() * getSpeed(), 
         getLastDirection().getY() * getSpeed()));[/color] // probably giving the second problem
}

我真的希望你们能帮我解决这个问题。

非常感谢!

【问题讨论】:

  • getLastDirection() & getSpeed() 这些函数是什么

标签: java box2d


【解决方案1】:

对不起,我解决了这个问题。原因是墙壁的位置错误(一开始就与玩家发生碰撞。

谢谢!

【讨论】:

    猜你喜欢
    • 2012-04-10
    • 2014-08-04
    • 2010-12-26
    • 1970-01-01
    • 2019-02-27
    • 1970-01-01
    • 2022-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多