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
}
}
StretchViewport對我更好。真正的訣竅是使用其他尺寸的寬度/高度。我使用800x600,就像在桌面項目中造成了奇怪的行爲。對於最低限度的過濾器我也使用線性因爲另一個沒有字。感謝您的幫助:-) – Cellist 2014-10-21 19:18:52
StretchViewport在具有與您測試的寬高比不同的設備上可能看起來很奇怪,因爲UI將會失真。如果您不使用mipmapping,性能可能會受到較低分辨率設備的影響,或者至少文本看起來不夠清晰。 – Tenfour04 2014-10-21 19:38:42