我最近开始使用libgdx进行编码,并在一个世界中建立了一个小小的移动"游戏。问题是它向上和向左(W和A)比向右和向下更快。 W,A和D,S的代码没有区别。 这是我的输入处理代码,在"渲染"之后的每一帧都被调用:
public void processInput() {
float delta = Gdx.graphics.getDeltaTime();
System.out.println(1.0/delta);
if (Gdx.input.isKeyJustPressed(Keys.A)) {
player.posX -= 100 * delta;
player.startAnimation(0); // Animation 0 = LEFT
elapsedTime = 0;
} else if (Gdx.input.isKeyJustPressed(Keys.D)) {
player.posX += 100 * delta;
player.startAnimation(1); // Animation 1 = RIGHT
elapsedTime = 0;
}
if (Gdx.input.isKeyJustPressed(Keys.W)) {
player.posY -= 100 * delta;
player.startAnimation(2); // Animation 2 = BACK
elapsedTime = 0;
} else if (Gdx.input.isKeyJustPressed(Keys.S)) {
player.posY += 100 * delta;
player.startAnimation(3); // Animation 3 = FRONT
elapsedTime = 0;
}
if(Gdx.input.isKeyJustPressed(Keys.ESCAPE)){
Gdx.app.exit();
}
boolean pressed = false;
if (Gdx.input.isKeyPressed(Keys.A)) {
player.posX -= 100 * delta;
pressed = true;
} else if (Gdx.input.isKeyPressed(Keys.D)) {
player.posX += 100 * delta;
pressed = true;
}
if (Gdx.input.isKeyPressed(Keys.W)) {
player.posY -= 100 * delta;
pressed = true;
} else if (Gdx.input.isKeyPressed(Keys.S)) {
player.posY += 100 * delta;
pressed = true;
}
if (!pressed) {
player.stopAnimation();
}
if(player.posX < 0){
player.posX = 0;
}
if(player.posY < 0){
player.posY = 0;
}
if(player.posX > world.sizeX()*50){
player.posX = world.sizeX()*50;
}
if(player.posY > world.sizeY()*50){
player.posY = world.sizeY()*50;;
}
player.update(delta);
}
此处还有一个包含完整代码的保管箱链接:https://www.dropbox.com/sh/p8umkyiyd663now/AAC4zt716rII-8sQpEbfuNuZa?dl=0
答案 0 :(得分:2)
问题是您将玩家位置存储为整数值。在delta计算之后,播放器速度非常小,将浮动值转换为整数会对速度产生巨大影响。
<强>比较强>
在W和A键的情况下,作为整数的Delta位置是2,在S和D上是1。
两种情况下,作为浮动的Delta位置约为1.7。
解决方案:使用浮点值存储玩家位置。使用整数值仅在某些基于网格的游戏中才有意义。
public float posX;
public float posY;