我正在尝试编写一个简单的2D平台游戏,我希望玩家可以浏览一些平台。不幸的是,我的播放器在一些平台上无缘无故地绊倒了:
这显然不是我想要的。我唯一可以想象的是,由于某种原因,盒子的高度不一样......但是如何解决这个问题呢?这是我的一些代码:
createPlatform ...
public static Body createPlatform(World world, int x, int y) {
BodyDef bodyDef = new BodyDef();
bodyDef.type = BodyDef.BodyType.StaticBody;
bodyDef.position.set(new Vector2(x, y));
PolygonShape shape = new PolygonShape();
shape.setAsBox(1, 1);
Body body = world.createBody(bodyDef);
body.createFixture(shape, Constants.GROUND_DENSITY);
body.resetMassData();
PlatformUserData userData = new PlatformUserData(1, 1, Constants.GROUND_IMAGE_PATH);
body.setUserData(userData);
shape.dispose();
return body;
}
Runner.java - act()
@Override
public void act(float delta) {
super.act(delta);
body.setLinearVelocity(new Vector2(10f,0));
}
答案 0 :(得分:1)
当你有多个部分组成的地面时,碰撞检测框架可能会检测到下一个块的边缘,就像它比前一个块稍微高一点。这是有时每个滑动对象发生的计算错误。这就是为什么他们经常将玩家的形状设置为椭圆,并冻结对象的旋转。
答案 1 :(得分:0)
问题在于玩家对地面的虚构因此速度大于摩擦支撑,因此身体会绊倒。
你必须把:
body.setFixedRotation(true);
或者降低摩擦的价值。