我在LibGDX做一个游戏 . 我有4个纹理作为视差背景和一些障碍物(一个在上部,另一个在屏幕的底部),这是运动部分:
//Parallax
if (bckgndmiddle_x <= -Const.VIEWPORT_W*2+(game_speed*delta)/2) bckgndmiddle_x=-(game_speed*delta)/2; else bckgndmiddle_x-=(game_speed*delta)/2;
if (bckgndfar_x <= -Const.VIEWPORT_W*2+(game_speed*delta)/5) bckgndfar_x=-(game_speed*delta)/5; else bckgndfar_x-=(game_speed*delta)/5;
for (Obstacle obst:obstacles) {
obst.update(game_speed*delta);
}
//End Main game loop
player.update();
game.batch.begin();
game.batch.draw(wall, bckgndfar_x,floor.getRegionHeight()+100);
game.batch.draw(wall, bckgndfar_x+wall.getRegionWidth(),floor.getRegionHeight()+100);
game.batch.draw(bot_furniture, bckgndmiddle_x,floor.getRegionHeight());
game.batch.draw(bot_furniture, bckgndmiddle_x+bot_furniture.getRegionWidth(),floor.getRegionHeight());
game.batch.draw(floor, bckgndmiddle_x,0);
game.batch.draw(floor, bckgndmiddle_x+floor.getRegionWidth(),0);
game.batch.draw(ceiling, bckgndfar_x,Const.VIEWPORT_H-ceiling.getRegionHeight());
game.batch.draw(ceiling, bckgndfar_x+ceiling.getRegionWidth(),Const.VIEWPORT_H-ceiling.getRegionHeight());
障碍物更新方法只是x- =速度;因为速度是收到的参数
问题在于纹理有时会发出奇怪的声音,就好像设备无法处理游戏并冻结一瞬间 .
任何线索为什么会发生这种情况?
EDIT
发生的事情是纹理时不时地结果(我是西班牙语,我不知道那个词)
我认为它必须是与背景的每个部分的第二个图像相关的东西,即增加宽度 . 就像它增加了宽度一样,但有时因为fps的下降(如1或2 fps)太多而且下次因为fps恢复正常而“移动”回到好位置 .
EDIT 2 我在没有障碍的情况下尝试了它并且它仍然口吃,我再次尝试了障碍物而没有背景但它没有,所以它必须与我在第一次编辑中所说的一样 .
顺便说一下,FPS下降小于1(已选中)
我刚刚尝试绘制整个背景图像(没有视差),仍然是同样的问题 .
1 回答
我看到一个与FPS掉落无关的可能原因:
这是你的第一行,为了易读性而分开:
通常,
else
语句用于以恒定速度移动背景 . 但只要它到达if
语句,就会明确设置位置而不考虑其先前的位置,因此移动将不会平滑 . 你需要将它移动到一个位置,看起来它已经从之前的位置移动了-(game_speed*delta)/2
.一种方法是始终以速度移动对象,并仅在必要时将纹理宽度向前移动作为校正 . 例如,假设您将屏幕的左下角保持为(0,0)::
上面的
2*
是因为我'm assuming from your other code that you are actually drawing two copies of the background texture side by side. If you were drawing a single, wider texture that'宽于视口宽度常数,那么你将删除2*
.同样的问题当然适用于您的第二行代码,您可以在其中设置远背景位移 .