Java libgdx一些按键比其他按键快?

Java libgdx一些按键比其他按键快?,java,input,libgdx,Java,Input,Libgdx,我最近开始使用libgdx进行编码,并构建了一个“在世界中移动”的小游戏。问题是它向上和向左(W和A)比向右和向下更快。W,A和D,S的代码没有区别。 下面是我的输入处理代码,它在“render”之后的每一帧都会被调用: public void processInput(){ float delta=Gdx.graphics.getDeltaTime(); 系统输出打印项数(1.0/增量); 如果(Gdx.input.isKeyJustPressed(Keys.A)){ player.posX-

我最近开始使用libgdx进行编码,并构建了一个“在世界中移动”的小游戏。问题是它向上和向左(W和A)比向右和向下更快。W,A和D,S的代码没有区别。 下面是我的输入处理代码,它在“render”之后的每一帧都会被调用:

public void processInput(){
float delta=Gdx.graphics.getDeltaTime();
系统输出打印项数(1.0/增量);
如果(Gdx.input.isKeyJustPressed(Keys.A)){
player.posX-=100*delta;
player.startAnimation(0);//动画0=左
elapsedTime=0;
}else if(Gdx.input.isKeyJustPressed(Keys.D)){
player.posX+=100*delta;
player.startAnimation(1);//动画1=右
elapsedTime=0;
}
如果(Gdx.input.isKeyJustPressed(Keys.W)){
player.posY-=100*delta;
player.startAnimation(2);//动画2=返回
elapsedTime=0;
}else if(Gdx.input.isKeyJustPressed(Keys.S)){
player.posY+=100*delta;
player.startAnimation(3);//动画3=前面
elapsedTime=0;
}
if(Gdx.input.isKeyJustPressed(Keys.ESCAPE)){
Gdx.app.exit();
}
布尔值=假;
如果(Gdx.input.isKeyPressed(按键A)){
player.posX-=100*delta;
按下=真;
}else if(Gdx.input.isKeyPressed(Keys.D)){
player.posX+=100*delta;
按下=真;
}
如果(Gdx.input.isKeyPressed(Keys.W)){
player.posY-=100*delta;
按下=真;
}else if(Gdx.input.isKeyPressed(Keys.S)){
player.posY+=100*delta;
按下=真;
}
如果(!按下){
player.stopAnimation();
}
如果(player.posX<0){
player.posX=0;
}
如果(player.posY<0){
player.posY=0;
}
如果(player.posX>world.sizeX()*50){
player.posX=world.sizeX()*50;
}
如果(player.posY>world.sizeY()*50){
player.posY=world.sizeY()*50;;
}
player.update(delta);
}

这里还有一个包含完整代码的dropbox链接:

问题是您将玩家位置存储为整数值。在delta计算之后,玩家的速度非常小,所以将浮点值转换为整数对速度有很大影响

比较

对于W和A键,作为整数的增量位置为2,对于S和D键,为1

在这两种情况下,浮动的增量位置都在1.7左右

解决方案:使用浮点值存储玩家位置。只有在基于网格的游戏中使用整数值才有意义

public float posX;
public float posY;

问题是您将玩家位置存储为整数值。在delta计算之后,玩家的速度非常小,所以将浮点值转换为整数对速度有很大影响

比较

对于W和A键,作为整数的增量位置为2,对于S和D键,为1

在这两种情况下,浮动的增量位置都在1.7左右

解决方案:使用浮点值存储玩家位置。只有在基于网格的游戏中使用整数值才有意义

public float posX;
public float posY;

试着在一个完美的方形窗口中运行游戏,看看你是否也经历了同样的行为?是的,先生。正方形窗口也是一样。你的相机的视口也是一个完美的正方形吗?是的,我只是把Gdx.graphics.getWidth/getHeight作为相机视口。我想你认为这个问题是通过屏幕分辨率来拉伸屏幕,这可以用一个完美的正方形来解决,但是我可以看到屏幕的X和Y值玩家的位置变化更快,而不仅仅是更快的移动。试着在一个完美的方形窗口中运行游戏,看看你是否也经历了同样的行为?是的,先生。正方形窗口也是一样。你的相机的视口也是一个完美的正方形吗?是的,我只是把Gdx.graphics.getWidth/getHeight作为相机视口。我想你认为这个问题是通过屏幕分辨率来拉伸屏幕,这可以用一个完美的正方形来解决,但是我可以看到屏幕的X和Y值球员的位置变化更快,而不仅仅是更快的移动。天哪,谢谢你。我现在记得我不想忘记将位置从int改为float,以防止计算精度问题。它解决了问题。天哪,谢谢你。我现在记得我不想忘记将位置从int改为float,以防止计算精度问题。它解决了这个问题。