Java 带有夹具的Jbox2D问题
我昨天刚开始在我的游戏中使用jbox2d,目前我遇到了一些问题,我找不到解决它们的方法。我有很多静态身体和一个动态身体(玩家),我想模拟碰撞 基本上,只要方法world.step被称为“我的动态身体”就可以在x轴和y轴(从18.0到19.25,从26.0到70.76)上移出原始位置。我尝试打印所有其他内容(静态身体的位置和动态身体的运动),这是正确的 我认为它与重力有关(我不需要重力),但在我将世界和动态实体设置为0.0f后,它仍然会产生相同的问题。我发现问题在于我的动态实体的固定装置(如果我移除它,问题就不会再发生) 此外,主体和动态实体的移动略有不同(以像素为单位,因此我猜我的setLinearVelocity方法可能是错误的) 我如何解决这个问题?这些问题是什么 这是我的代码(我避免无用的东西,只保留那些关于jbox2d的东西): Map类,其中包含游戏的地图Java 带有夹具的Jbox2D问题,java,box2d,Java,Box2d,我昨天刚开始在我的游戏中使用jbox2d,目前我遇到了一些问题,我找不到解决它们的方法。我有很多静态身体和一个动态身体(玩家),我想模拟碰撞 基本上,只要方法world.step被称为“我的动态身体”就可以在x轴和y轴(从18.0到19.25,从26.0到70.76)上移出原始位置。我尝试打印所有其他内容(静态身体的位置和动态身体的运动),这是正确的 我认为它与重力有关(我不需要重力),但在我将世界和动态实体设置为0.0f后,它仍然会产生相同的问题。我发现问题在于我的动态实体的固定装置(如果我移
//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()提供了哪些函数