2014-10-19 49 views
0

我得到三星和LG不同的畫面:不同的輸出與LibGDX和舞臺上不同手機

三星(因爲它應該是) ! http://www.marcofriedmann.de/right.png

LG: ! http://www.marcofriedmann.de/wrong.png

我嘗試過各種視口類型,但沒有改變。 任何線索? 下面是代碼:

package de.marcofriedmann.slideit.screens; 

import com.badlogic.gdx.Game; 
import com.badlogic.gdx.Gdx; 
import com.badlogic.gdx.graphics.Color; 
import com.badlogic.gdx.graphics.GL20; 
import com.badlogic.gdx.graphics.g2d.TextureAtlas; 
import com.badlogic.gdx.scenes.scene2d.Actor; 
import com.badlogic.gdx.scenes.scene2d.Stage; 
import com.badlogic.gdx.scenes.scene2d.ui.Image; 
import com.badlogic.gdx.scenes.scene2d.ui.Label; 
import com.badlogic.gdx.scenes.scene2d.ui.Label.LabelStyle; 
import com.badlogic.gdx.scenes.scene2d.ui.Skin; 
import com.badlogic.gdx.scenes.scene2d.ui.Stack; 
import com.badlogic.gdx.scenes.scene2d.ui.Table; 
import com.badlogic.gdx.scenes.scene2d.ui.TextButton; 
import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener; 
import com.badlogic.gdx.utils.viewport.ExtendViewport; 

import de.marcofriedmann.slideit.util.Assets; 
import de.marcofriedmann.slideit.util.Constants; 
import de.marcofriedmann.slideit.util.GameStatistics; 
import de.marcofriedmann.slideit.util.IActivityRequestHandler; 

public class ScoreScreen extends AbstractGameScreen { 
private GameStatistics statistics; 
private Stage stage; 
private Skin skinSlideIt; 
private Skin skinLibgdx; 
private Image imgBackground; 


public ScoreScreen(Game game, IActivityRequestHandler myRequestHandler, 
     GameStatistics statistics) { 
    super(game, myRequestHandler); 
    this.statistics = statistics; 
} 

private void rebuildStage() { 
    skinSlideIt = new Skin(Gdx.files.internal(Constants.SKIN_SLIDEIT), new TextureAtlas(Constants.TEXTURE_ATLAS_OBJECTS)); 
    skinLibgdx = new Skin(Gdx.files.internal(Constants.SKIN_LIBGDX_UI), new TextureAtlas(Constants.TEXTURE_ATLAS_LIBGDX_UI)); 
    Table layerBackground = buildBackgroundLayer(); 
    Table layerControls = buildControlsLayer(); 
    stage.clear(); 
    Stack stack = new Stack(); 
    stack.setFillParent(true); 
    stage.addActor(stack); 
    stack.setSize(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); 
    stack.add(layerBackground); 
    stack.add(layerControls); 

} 

private Table buildBackgroundLayer() { 
    Table layer = new Table(); 
    imgBackground = new Image(skinSlideIt, "screenshot_slideit"); 
    layer.add(imgBackground); 
    return layer; 
} 

private Table buildControlsLayer() { 
    LabelStyle labelTitleStyle = new LabelStyle(Assets.instance.fonts.titleFont, Color.WHITE); 
    LabelStyle labelNormalStyle = new LabelStyle(Assets.instance.fonts.normalFont, Color.WHITE); 
    LabelStyle labelNormalGreenStyle = new LabelStyle(Assets.instance.fonts.normalFont, Color.GREEN); 
    Table layer = new Table(); 
    layer.setFillParent(true); 
    layer.top().padTop(50); 
    Label actualStatisticsTitle = new Label("Actual Game Statistics ", labelTitleStyle); 
    String actualStatisticsText1 = 
      "Number of seconds survived: " + statistics.actualGameStatistics.numActualSecondsSurvived + 
      "/" + statistics.numSecondsSurvived; 
    String actualStatisticsText2 = 
      "Number of waves survived: " + statistics.actualGameStatistics.numActualWavesSurvived + 
      "/" + statistics.numWavesSurvived; 
    String actualStatisticsText3 = 
      "Number of wall collisions: " + statistics.actualGameStatistics.numActualWallCollisions + 
      "/" + statistics.numWallCollisions; 
    String actualStatisticsText4 = 
      "Number of enemy collisions: " + statistics.actualGameStatistics.numActualEnemyCollisions + 
      "/" + statistics.numEnemyCollisions; 

    Label actualStatisticsLabel1; 
    if (statistics.actualGameStatistics.numActualSecondsSurvived > statistics.numSecondsSurvived) { 
     actualStatisticsLabel1 = new Label(actualStatisticsText1, labelNormalGreenStyle); 
     statistics.numSecondsSurvived = statistics.actualGameStatistics.numActualSecondsSurvived; 
    } else { 
     actualStatisticsLabel1 = new Label(actualStatisticsText1, labelNormalStyle); 
    } 

    Label actualStatisticsLabel2; 
    if (statistics.actualGameStatistics.numActualWavesSurvived > statistics.numWavesSurvived) { 
     actualStatisticsLabel2 = new Label(actualStatisticsText2, labelNormalGreenStyle); 
     statistics.numWavesSurvived = statistics.actualGameStatistics.numActualWavesSurvived; 
    } else { 
     actualStatisticsLabel2 = new Label(actualStatisticsText2, labelNormalStyle); 
    } 

    Label actualStatisticsLabel3; 
    if (statistics.actualGameStatistics.numActualWallCollisions > statistics.numWallCollisions) { 
     actualStatisticsLabel3 = new Label(actualStatisticsText3, labelNormalGreenStyle); 
     statistics.numWallCollisions = statistics.actualGameStatistics.numActualWallCollisions; 
    } else { 
     actualStatisticsLabel3 = new Label(actualStatisticsText3, labelNormalStyle); 
    } 

    Label actualStatisticsLabel4; 
    if (statistics.actualGameStatistics.numActualEnemyCollisions > statistics.numEnemyCollisions) { 
     actualStatisticsLabel4 = new Label(actualStatisticsText4, labelNormalGreenStyle); 
     statistics.numEnemyCollisions = statistics.actualGameStatistics.numActualEnemyCollisions; 
    } else { 
     actualStatisticsLabel4 = new Label(actualStatisticsText4, labelNormalStyle); 
    } 
    statistics.saveGameStatistics(); 


    Label overallStatisticsTitle = new Label("Overall Game Statistics ", labelTitleStyle); 
    String overallStatisticsText = 
      "Number of games played: " + statistics.numGamesPlayed + "\n" + 
      "Number of seconds survived: " + statistics.numSecondsPlayedTotal + "\n" + 
      "Number of wall collisions: " + statistics.numWallCollisionsTotal + "\n" + 
      "Number of enemy collisions: " + statistics.numEnemyCollisionsTotal; 

    Label overallStatisticsLabel = new Label(overallStatisticsText, labelNormalStyle); 

    TextButton playButton = new TextButton(" Play ", skinLibgdx); 
    playButton.addListener(new ChangeListener() { 
     @Override 
     public void changed(ChangeEvent event, Actor actor) { 
      myRequestHandler.showAds(false); 
      game.setScreen(new GameScreen(game, myRequestHandler)); 
     } 
    }); 

    TextButton resetButton = new TextButton(" Reset ", skinLibgdx); 
    resetButton.addListener(new ChangeListener() { 
     @Override 
     public void changed(ChangeEvent event, Actor actor) { 
      statistics.actualGameStatistics.numActualEnemyCollisions = 0; 
      statistics.actualGameStatistics.numActualSecondsSurvived = 0; 
      statistics.actualGameStatistics.numActualWallCollisions = 0; 
      statistics.actualGameStatistics.numActualWavesSurvived = 0; 
      statistics.numEnemyCollisions = 0; 
      statistics.numEnemyCollisionsTotal = 0; 
      statistics.numGamesPlayed = 0; 
      statistics.numSecondsPlayedTotal = 0; 
      statistics.numSecondsSurvived = 0; 
      statistics.numWallCollisions = 0; 
      statistics.numWallCollisionsTotal = 0; 
      statistics.numWavesSurvived = 0; 
      statistics.saveGameStatistics(); 
      rebuildStage(); 
     } 
    }); 

    layer.add(actualStatisticsTitle); 
    layer.add(playButton); 
    layer.row(); 
    layer.add(actualStatisticsLabel1); 
    layer.row(); 
    layer.add(actualStatisticsLabel2); 
    layer.row(); 
    layer.add(actualStatisticsLabel3); 
    layer.row(); 
    layer.add(actualStatisticsLabel4); 
    layer.row(); 
    layer.add(overallStatisticsTitle); 
    layer.add(resetButton); 
    layer.row(); 
    layer.add(overallStatisticsLabel); 

    return layer; 
} 

@Override 
public void render(float deltaTime) { 
    Gdx.gl.glClearColor(0, 0, 0, 0); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
    stage.act(deltaTime); 
    stage.draw(); 
} 

@Override 
public void resize(int width, int height) { 
    stage.getViewport().update(width, height, false); 
} 

@Override 
public void show() { 
    stage = new Stage(new ExtendViewport(Gdx.graphics.getWidth(), Gdx.graphics.getHeight())); 
    Gdx.input.setInputProcessor(stage); 
    rebuildStage(); 
    myRequestHandler.showAds(true); 
} 



@Override 
public void hide() { 
    stage.dispose(); 
    skinSlideIt.dispose(); 
    skinLibgdx.dispose(); 
} 

@Override 
public void pause() { 
    // TODO Auto-generated method stub 

} 

@Override 
public void resume() { 
    // TODO Auto-generated method stub 

} 

@Override 
public void dispose() { 
    // TODO Auto-generated method stub 

} 

} 

回答

0

你在你的字體來源的紋理是你正在測試的LG手機的低分辨率屏幕太大。有幾種方法可以解決這個問題。這裏有幾個選擇:

  • 創建一個較小的分辨率字體和加載,而不是在具有低分辨率屏幕的設備。
  • 使用ExtendViewport,但不要通過構造函數從getHeight()getWidth()的實際屏幕尺寸。相反,請給它最小尺寸,你知道有必要讓你的整個UI展示。它會縮小以適應較小的屏幕。您可能希望將字體上的最小過濾器設置爲MipMapLinearNearest或MipMapLinearLinear。第二種選擇在更廣泛的設備上看起來更好,但可能會導致幀速率。磁棒過濾器必須是線性的。
+0

StretchViewport對我更好。真正的訣竅是使用其他尺寸的寬度/高度。我使用800x600,就像在桌面項目中造成了奇怪的行爲。對於最低限度的過濾器我也使用線性因爲另一個沒有字。感謝您的幫助:-) – Cellist 2014-10-21 19:18:52

+0

StretchViewport在具有與您測試的寬高比不同的設備上可能看起來很奇怪,因爲UI將會失真。如果您不使用mipmapping,性能可能會受到較低分辨率設備的影響,或者至少文本看起來不夠清晰。 – Tenfour04 2014-10-21 19:38:42