LibGDX应用程序无法在手机上快速更新

时间:2017-05-23 08:52:49

标签: android optimization libgdx

我知道在开发应用时这是一个常见问题:应用在桌面上运行流畅,但在设备本身无法运行。但这里的问题不是帧速率,而是角色跳跃时的更新时间。

当点击屏幕时,角色应该跳跃,然后由于重力而向下滑落,但是在我的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);
    }

0 个答案:

没有答案