我知道在开发应用时这是一个常见问题:应用在桌面上运行流畅,但在设备本身无法运行。但这里的问题不是帧速率,而是角色跳跃时的更新时间。
当点击屏幕时,角色应该跳跃,然后由于重力而向下滑落,但是在我的Android设备上,当角色跳跃时,他会在空中停留太长时间再次接触地面。 / p>
上次遇到类似的问题时,我还没有使用过AssetManager。我曾经在每次显示特定的游戏状态时加载纹理然后处理它们。
texture = new Texture("placeholder.png");
在我开始编程AssetManager以在应用程序启动之前加载我的所有纹理和文件(在加载屏幕中)后,游戏开始顺利运行。
但现在,问题又回来了,我不确定如何解决这个问题。解决方案是否类似于帧率导致的滞后(在render()方法中创建对象,一次更新太多东西等)?我在实施商店后发现这个问题已经开始了,所以我应该尝试查看它的代码吗?
编辑:这是我的一些代码: 来自" laggy"的渲染方法游戏状态:
cam.update();
sb.setProjectionMatrix(cam.combined);
Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
sb.begin();
sb.setColor(Color.WHITE);
sb.draw(bg, cam.position.x - cam.viewportWidth / 2, 0, cam.viewportWidth, cam.viewportHeight);
for(Coin coin : coins)
sb.draw(coin.getCoin(), coin.getPosCoin().x + 300, coin.getPosCoin().y, 100, 100);
sb.draw(bird.getTexture(), bird.getPosition().x, bird.getPosition().y, bird.getBounds().getWidth(), bird.getBounds().getHeight());
for (Tube tube : tubes) {
sb.draw(tube.getTopTube(), tube.getPosTopTube().x + 300, tube.getPosTopTube().y, 230, 1660);
sb.draw(tube.getBottomTube(), tube.getPosBotTube().x + 300, tube.getPosBotTube().y, 230, 1660);}
sb.draw(grass, groundPos1.x, groundPos1.y);
sb.draw(grass, groundPos2.x, groundPos2.y);
sb.draw(grass, groundPos3.x, groundPos3.y);
font120.draw(sb, score + "", cam.position.x - 29, cam.viewportHeight - 105, 100, Align.center, false);
if(gameState == 1) {
sb.draw(pausemenu, cam.position.x - 315, cam.viewportHeight / 2 - 625 / 2, 625, 625);
table.setPosition(cam.position.x, 560);
}
if(gameState == 2){
String highScore = getHighScore() + "";
String coins = getCoins() + "";
sb.draw(gameover, cam.position.x - gameover.getWidth() / 2 - 85 , cam.viewportHeight / 2 - gameover.getHeight() / 2, 600, 500);
highScoreFont.draw(sb, "Highscore: " + highScore, cam.position.x - highScoreFont.getScaleX() / 2 - 250 , cam.viewportHeight - 425, 500, Align.center, true);
coinsFont.draw(sb, coins, cam.position.x - 201, cam.viewportHeight - 590, 500, Align.center, false);
sb.draw(coin, cam.position.x - layout.width / 2 - 51, cam.viewportHeight - 660, 90, 90);
restartButton.setPosition(cam.position.x - restartButton.getWidth() / 2, 525);
}
if (gameState != 1)
pauseButton.setPosition(cam.position.x - 300, 1150);
sb.end();
stage.act();
stage.draw();
}
跳跃物理:
if (position.y > 0 && isAlive) {
velocity.add(0, GRAVITY);
}
velocity.scl(dt);
if(isAlive) {
position.add(MOVEMENT * dt, velocity.y);
velocity.scl(1 / dt);
}