2011-10-15 54 views
2

我正在用libgdx創建一個遊戲,我想在桌面上以更高的分辨率運行,但是我希望它能夠在小型分辨率下在Android上運行時正確縮放所有內容。我讀過這樣做的最好方法是不使用像素完美的相機,而是使用世界座標,但我不知道如何正確地做到這一點。如何創建一個能夠正確使用libgdx縮放我的精靈/貼圖的正交相機?

這是我現在所擁有的代碼:

@Override 
public void create() { 
    characterTexture = new Texture(Gdx.files.internal("character.png")); 
    characterTextureRegion = new TextureRegion(characterTexture, 0, 0, 100, 150); 
    batch = new SpriteBatch(); 


    Gdx.gl10.glClearColor(0.4f, 0.6f, 0.9f, 1); 

    float aspectRatio = (float)Gdx.graphics.getWidth()/(float)Gdx.graphics.getHeight(); 
    camera= new OrthographicCamera(aspectRatio, 1.0f); 

} 

@Override 
public void render() { 
    GL10 gl = Gdx.graphics.getGL10(); 

    gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 

    camera.update(); 
    camera.apply(gl); 
    batch.setProjectionMatrix(camera.combined); 

    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 

    draw(); 
} 

private void draw() { 
    //batch.getProjectionMatrix().set(camera.combined); 
    batch.begin(); 

    batch.draw(characterTextureRegion, 0, 0, // the bottom left corner of the box, unrotated 
      1f, 1f, // the rotation center relative to the bottom left corner of the box 
      0.390625f, 0.5859375f, // the width and height of the box 
      1, 1, // the scale on the x- and y-axis 
      0); // the rotation angle 


    batch.end(); 
} 

紋理我使用的是256×256,在它是100x150的實際圖像。

這是結果我得到的,當我運行遊戲:http://i.imgur.com/q1cZT.png

什麼是着手做的最好辦法:http://i.imgur.com/HV9Bi.png

是被渲染的是巨大的,考慮到這是原始圖像的精靈這樣精靈就能以原始大小渲染,同時仍然保持在不同分辨率下玩遊戲時能夠正確縮放的能力?

我只找到兩種解決方案,我不喜歡這兩種解決方案。

  1. 如果我使用相機的像素座標,圖像顯示了它應該如何處理,但是當我用不同的分辨率將其放在手機上時,圖像根本沒有縮放。
  2. 我可以在繪製時縮放紋理區域,但它似乎有更好的方法,因爲試圖找出正確的數字以縮放它非常繁瑣。
+0

嘗試使用FitViewport類 – Eames

回答

0

首先,你需要修復世界的界限(我的意思是你的遊戲)。在那個世界上只有你演員(遊戲角色)應該扮演。如果您正在穿越邊界,請使用相機進行管理,如上下左右顯示。

4

你有沒有使用Libgdx設置工具?當您使用它創建項目時,它會顯示一個示例圖像。無論您將屏幕更改爲多大,似乎都會保持比例正確。

public class RotationTest implements ApplicationListener { 
private OrthographicCamera camera; 
private SpriteBatch batch; 
private Texture texture; 
private Sprite sprite; 
Stage stage; 
public boolean leonAiming = true; 

@Override 
public void create() {  
    float w = Gdx.graphics.getWidth(); 
    float h = Gdx.graphics.getHeight(); 

    camera = new OrthographicCamera(1, h/w); 
    batch = new SpriteBatch(); 

    texture = new Texture(Gdx.files.internal("data/libgdx.png")); 
    texture.setFilter(TextureFilter.Linear, TextureFilter.Linear); 

    TextureRegion region = new TextureRegion(texture, 0, 0, 512, 275); 

    sprite = new Sprite(region); 
    sprite.setSize(0.9f, 0.9f * sprite.getHeight()/sprite.getWidth()); 
    sprite.setOrigin(sprite.getWidth()/2, sprite.getHeight()/2); 
    sprite.setPosition(-sprite.getWidth()/2, -sprite.getHeight()/2); }.... 

@Override 
public void render() {  
    Gdx.gl.glClearColor(1, 1, 1, 1); 
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 

    batch.setProjectionMatrix(camera.combined); 
    batch.begin(); 
    sprite.draw(batch); 
    batch.end(); 
+7

哈哈,剛纔看到的,這是從2011年,估計你已經被找到了答案,現在,或停止開發 – AspiretoCode

+1

我試過這個實現,但它不是我的畫紋理。任何想法爲什麼? – Nanor

相關問題