2014-10-05 47 views
0

当我在桌面上运行游戏时效果很好,但是当我在我的Android设备上运行它时,图像看起来像一半,当我使用PLAY按钮游戏关闭时,任何人都可以帮助我?谢谢。Viewport的Android问题

public class GameScreen extends AbstractScreen { 

    private Viewport viewport; 
    private Camera camera; 
    private SpriteBatch batch; 
    private Texture texture; 
    private float escala; 
    private Paddle Lpaddle, Rpaddle; 
    private Ball ball; 
    private BitmapFont font; 
    private int puntuacion, puntuacionMaxima; 
    private Preferences preferencias; 
    private Music music; 
    private Sound sonidoex; 

    public GameScreen(Main main) { 
     super(main); 
      preferencias = Gdx.app.getPreferences("PuntuacionAppPoints"); 
      puntuacionMaxima = preferencias.getInteger("puntuacionMaxima"); 
      music =Gdx.audio.newMusic(Gdx.files.internal("bgmusic.mp3")); 
      music.play(); 
      music.setVolume((float) 0.3); 
      music.setLooping(true); 
      sonidoex = Gdx.audio.newSound(Gdx.files.internal("explosion5.wav")); 
    } 

    public void create(){ 
     camera = new PerspectiveCamera(); 
      viewport = new FitViewport(800, 480, camera); 

    } 


    public void show(){ 
     batch = main.getBatch(); 
     texture = new Texture(Gdx.files.internal("spacebg.png")); 
     Texture texturaBola = new Texture(Gdx.files.internal("bola.png")); 
     ball = new Ball(Gdx.graphics.getWidth()/2 - texturaBola.getWidth()/2, Gdx.graphics.getHeight()/2 - texturaBola.getHeight()/2); 
     Texture texturaPala= new Texture(Gdx.files.internal("pala.png")); 
     Lpaddle = new LeftPaddle(80, Gdx.graphics.getHeight()/2 -texturaPala.getHeight() /2); 
     Rpaddle = new RightPaddle(Gdx.graphics.getWidth() -100, Gdx.graphics.getHeight()/2 - texturaPala.getHeight() /2, ball); 
     font = new BitmapFont(); 
     font.setColor(Color.WHITE); 
     font.setScale(1f); 
     puntuacion = 0; 


    } 

    public void render(float delta){ 
     Gdx.gl.glClearColor(0, 0, 0, 1); 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
     updatePuntuacion(); 
     Lpaddle.update(); 
     Rpaddle.update(); 
     ball.update(Lpaddle, Rpaddle); 
     batch.begin(); 
     batch.draw(texture, 0, 0,texture.getWidth(), texture.getHeight()); 
     ball.draw(batch); 
     Lpaddle.draw(batch); 
     Rpaddle.draw(batch); 
     font.draw(batch, "Points: " + Integer.toString(puntuacion), Gdx.graphics.getWidth()/4 ,Gdx.graphics.getHeight() - 5); 
     font.draw(batch, "High score: " + Integer.toString(puntuacionMaxima),Gdx.graphics.getWidth() - Gdx.graphics.getWidth()/4 ,Gdx.graphics.getHeight() - 5); 
     batch.end(); 
    } 

    private void updatePuntuacion(){ 
     if(ball.getBordes().overlaps(Lpaddle.getBordes())) { 
      puntuacion = puntuacion + 1; 
      if(puntuacion > puntuacionMaxima) 
      puntuacionMaxima = puntuacion; 

     } 
     if(ball.getBordes().x <= 0) 
      sonidoex.play(); 

     if(ball.getBordes().x <= 0) 
     puntuacion =0; 

     if(ball.getBordes().x <=0) 
      Gdx.input.vibrate(1000); 

     if(ball.getBordes().x <=0) 
      Screens.juego.setScreen(Screens.MAINSCREEN); 

     ball.comprobarPosicionBola(); 
     } 


    public void hide(){ 
     font.dispose(); 
     texture.dispose(); 

    } 

    @Override 
    public void dispose(){ 
     preferencias.putInteger("puntuacionMaxima", puntuacionMaxima); 
     preferencias.flush(); 
    } 

    public void resize(int width, int height){  
     float widthImage = texture.getWidth(); 
     float heightImage = texture.getHeight(); 
     float r = heightImage/widthImage; 
     if(heightImage > height) { 
      heightImage = height; 
      widthImage = heightImage/r; 
     } 
     if(widthImage > width) { 
      widthImage = width; 
      heightImage = widthImage * r; 
     } 
     escala = width/widthImage; 

     if(Gdx.app.getType()== ApplicationType.Android) 
     viewport.update(width, height); 

    } 

} 

回答

0

首先,使用orthograpic相机。

camera=new OrthographicCamera(800,480); 
camera.position.set(800/2f,480/2f,0); 
viewport=new FitViewport(800,480,camera); 

现在0,0位于屏幕的左下角。

而且做batch.begin不要忘记设置你的投影矩阵之前

batch.setProjectionMatrix(camera.combined); 
batch.begin(); 
//// 
//// 
batch.end();