当我的Body
物体碰到墙壁并且我按住右键时会发生这种情况。所以只要我拿着正确的钥匙就停止了。
当我释放我的右键时,它掉了下来。如何解决这个问题?
这是我的剧本:
World
定义:
this.world = new World(new Vector2(0, -9.8f), true);
从tilemap创建ground
正文:
//create body and fixture variables
BodyDef bdef = new BodyDef();
PolygonShape shape = new PolygonShape();
FixtureDef fdef = new FixtureDef();
Body body;
//create ground bodies/fixtures
for(MapObject object : tileMap.getLayers().get(2).getObjects().getByType(RectangleMapObject.class)){
rect = ((RectangleMapObject) object).getRectangle();
x = Static.toMeter(rect.getX() + rect.getWidth() / 2);
y = Static.toMeter(rect.getY() + rect.getHeight() / 2);
bdef.type = BodyDef.BodyType.StaticBody;
bdef.position.set(x, y);
body = world.createBody(bdef);
x = Static.toMeter(rect.getWidth() / 2);
y = Static.toMeter(rect.getHeight() / 2);
shape.setAsBox(x, y);
fdef.shape = shape;
fdef.filter.categoryBits = HookaHookaGame.GROUND_BIT;
body.createFixture(fdef);
}
Player
身体定义:
BodyDef bodyDef = new BodyDef();
bodyDef.position.set(Static.toMeter(128), Static.toMeter(HookaHookaGame.HEIGHT));
bodyDef.type = BodyDef.BodyType.DynamicBody;
body = world.createBody(bodyDef);
// Define mario shape
PolygonShape shape = new PolygonShape();
shape.setAsBox(Static.toMeter(32) / 2, Static.toMeter(32) / 2);
FixtureDef fixture = new FixtureDef();
fixture.shape = shape;
body.createFixture(fixture);
// Define foot shape
shape = new PolygonShape();
shape.setAsBox(Static.toMeter(32 / 4) / 2, Static.toMeter(32 / 4) / 2, new Vector2(0, Static.toMeter((-32 + 8) / 2)), 0);
fixture = new FixtureDef();
fixture.shape = shape;
// Create filter
fixture.filter.categoryBits = HookaHookaGame.MARIO_BIT;
fixture.filter.maskBits = HookaHookaGame.GROUND_BIT;
body.createFixture(fixture).setUserData(this);
我的ContactListener
我的beginContact()
方法:
int cDef;
Fixture a, b;
MySprite spriteA, spriteB;
a = contact.getFixtureA();
b = contact.getFixtureB();
cDef = a.getFilterData().categoryBits | b.getFilterData().categoryBits;
switch (cDef) {
case HookaHookaGame.GROUND_BIT | HookaHookaGame.MARIO_BIT:
System.out.println("Foot with ground");
if(a.getUserData() != null) {
spriteA = (MySprite) a.getUserData();
spriteA.onHit();
}
if(b.getUserData() != null) {
spriteB = (MySprite) b.getUserData();
spriteB.onHit();
}
break;
}
处理用户输入:
private void handleInput() {
//control our player using immediate impulses
if (Gdx.input.isKeyPressed(Input.Keys.D))
player.moveRight();
else if (Gdx.input.isKeyPressed(Input.Keys.A))
player.moveLeft();
else
player.stopMove();
if (Gdx.input.isKeyPressed(Input.Keys.SPACE))
player.jump();
}
我读了他的教程,似乎他没有做任何事情,它工作正常。他的源代码GitHub
答案 0 :(得分:2)
问题是你的线性冲动是强烈的。
您可以使用Mario项目进行测试,如果增加冲动,您也会陷入墙壁。
要解决这个问题,要么降低冲动力,降低摩擦力(但是你可能需要停止马里奥的代码)或者不是应用线性冲动,而是应用火炬并使用圆形形状来让玩家#34;辊"
这些解决方案都不是完美的,但您可以尝试看看哪一种最适合您。