2015-07-01 39 views
1

每次渲染函数调用时,我都将纹理设置为调整为Gdx.graphics.getWidth(),Gdx.graphics.getHeight()。实际上,当我启动应用程序时,纹理设置为全屏(如我所愿)。但是,当我改变应用程序的大小时,纹理以一种愚蠢的方式绘制,而我希望它始终处于全屏状态。在调整大小时缩放libgdx中的纹理

下面是代码:

package com.leopikinc.bobdestroyer; 

import com.badlogic.gdx.ApplicationAdapter; 
import com.badlogic.gdx.Gdx; 
import com.badlogic.gdx.audio.Music; 
import com.badlogic.gdx.graphics.GL20; 

import com.badlogic.gdx.graphics.Texture; 
import com.badlogic.gdx.graphics.g2d.SpriteBatch; 

public class BobDestroyer extends ApplicationAdapter { 
    SpriteBatch batch; 
    Texture mainscreen; 
    Music intromusic; 
    float VOLUME; 

    @Override 
    public void create() { 
     VOLUME = 1f; 
     batch = new SpriteBatch(); 
     mainscreen = new Texture(Gdx.files.internal("data/FirstLevel.png")); 
     intromusic = Gdx.audio.newMusic(Gdx.files.internal("data/IntroMusic.mp3")); 
     intromusic.setLooping(true); 
     intromusic.setVolume(VOLUME); 
     intromusic.play(); 
    } 

    @Override 
    public void render() { 
     Gdx.gl.glClearColor(1, 1, 1, 0); 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
     batch.begin(); 
     batch.draw(mainscreen, 0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); 
     batch.end(); 
    } 

    @Override 
    public void resize(int width, int height){ 
    } 
} 

Nice way

Dumb way

+0

您哑方式是什么意思?你能给我们一个你的屏幕的图片吗? –

+0

@Saeed,做到了。 – Leopik

回答

0

您应该使用viewport来处理不同的纵横比。

以下是可以显示全屏幕纹理的StretchViewport的示例。

public class MyGdxGame extends ApplicationAdapter { 
    SpriteBatch batch; 
    Texture img; 
    private Viewport viewport; 
    private Camera camera; 

    @Override 
    public void create() { 
     camera = new OrthographicCamera(); 
     viewport = new StretchViewport(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); 
     viewport.setCamera(camera); 
     batch = new SpriteBatch(); 
     img = new Texture("badlogic.jpg"); 

    } 

    @Override 
    public void render() { 
     camera.update(); 
     Gdx.gl.glClearColor(0, 0, 0, 1); 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
     batch.begin(); 
     batch.draw(img, 0, 0, viewport.getWorldWidth(),viewport.getWorldHeight()); 
     batch.end(); 
    } 

    @Override 
    public void resize(int width, int height) { 
     viewport.update(width, height); 

    } 
} 

改变屏幕尺寸前:

before changing screen sizes 改变屏幕尺寸后:

after changing screen sizes