2015-02-07 127 views
0

我只爲Android製作遊戲。 我正在使用Libgdx作爲我正在進行的遊戲的框架,並且在繪製小精靈時遇到了麻煩。常規的SpriteBatch.draw()工作正常,但Sprite.draw()將無法正常工作。 這裏是我的主類的代碼:Libgdx Sprite.draw()不會繪製任何東西

private OrthographicCamera camera; 
    private Texture currentBackground; 
    private SpriteBatch batch; 
    private Bunker bunker; 
    private AssetManagerWrapper assetsManager = new AssetManagerWrapper(); 
    private Turret turret; 

    @Override 
    public void create() { 
     camera = new OrthographicCamera(); 
     camera.setToOrtho(false, C.WIDTH_TARGET_RESOLUTION, C.HEIGHT_TARGET_RESOLUTION); 
     batch = new SpriteBatch(); 
     assetsManager.loadGFX(); 
     assetsManager.finishLoading(); 
     createBunker(); 
     currentBackground = assetsManager.get(AssetsPaths.Gfx.Background.CITY_DAY); 
    } 

    private void createBunker() { 
     bunker = new Bunker(assetsManager.get(AssetsPaths.Gfx.Bunker.BUNKER, Texture.class)); 
     turret = new Turret(assetsManager.get(AssetsPaths.Gfx.Bunker.TURRET, Texture.class), bunker.getCenterX(), (int) (bunker.getY() + bunker.getHeight() - 10)); 
    } 

    @Override 
    public void render() { 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
     camera.update(); 
     batch.setProjectionMatrix(camera.combined); 
     drawGFX(); 
    } 

    private void drawGFX() { 
     batch.begin(); 
     batch.draw(currentBackground, 0, 0); 
     bunker.draw(batch); 
     batch.end(); 
    } 


    @Override 
    public void dispose() { 
     assetsManager.dispose(); 
    } 

地堡類擴展類稱爲遊戲對象延伸雪碧。 由於某種原因,此行:

bunker.draw(batch); 

不繪製精靈。但如果我將其更改爲:

batch.draw(bunker.getTexture(), bunker.getX(), bunker.getY()); 

它的工作原理非常完美。我知道我可以繼續使用這種方式,但恐怕由於我不知道的原因,效率會降低。

行:

batch.draw(currentBackground, 0, 0); 

運行完美了。

我錯過了什麼嗎?

預先感謝

編輯: 我改變了掩體對象位置爲x = 0和y = 0。 這是getVertices()的打印: 0.0, 0.0, -1.7014117E38, 0.0, 0.0, 0.0, 5.9, -1.7014117E38, 0.0, 0.0, 100.0, 59.0, -1.7014117E38, 0.0, 0.0, 100.0, 0.0, -1.7014117E38, 0.0, 0.0,

我真的不understan d的值,但似乎精靈不是在外面畫的。

地堡類只是擴展了遊戲對象類:

public class GameObject extends Sprite { 

    public GameObject(Texture image, int x, int y) { 
     setTexture(image); 
     setBounds(x, y, image.getWidth(), image.getHeight()); 
     setPosition(x, y); 
     setOrigin(x, y); 
    } 
} 
+0

你可以使用你的Bunker類進行編輯嗎?或者它只是擴展Sprite? – 2015-02-07 20:24:58

回答

0

的方法sprite.draw可以從libgdx源可以看出做到以下幾點:

batch.draw(texture, getVertices(), 0, SPRITE_SIZE); 

在所有現實中,它會由於您不會調用getVertices()方法,因此使用batch.draw(bunker, ...更有效。

編輯:

我可能說得太快很快就哪個更有效,SpriteBatch最終會導出頂點,當你調用batch.draw()。 sprite.draw()應該更好,因爲頂點已經被計算出來,並且只有在精靈變髒時纔會被重新計算。

如果您要通過調用bunker.getVertices()來查找繪製精靈的位置並輸出到日誌中,您可以看到它是否僅在視口外繪製。

+0

我在問題中發佈了getVertices()。它似乎沒有帶領我到任何地方。 – 2015-02-10 20:37:26

+0

那些頂點看起來很奇怪,它看起來是繪製一個多邊形而不是一個矩形,並且u v座標都是零,我將不得不更多地研究這些頂點。 – 2015-02-11 13:49:30