2014-01-30 30 views
5

我確定我錯過了一些非常明顯的東西,但我是初學者,所以請不要暗戀我。我的問題是我有一個比屏幕小的視口。現在我也想直接使用Sprite.draw(SpriteBatch)在屏幕上繪製一個Sprite。 Sprite和舞臺的位置不重疊。舞臺繪製得很好,但Sprite不可見。當我在render-method中註釋掉stage.draw()部分時,Sprite就可見了。libGdx:有一個階段時,不會畫出雪碧

代碼: 這是我的渲染方法:

@Override 
public void render(float delta) { 
    Gdx.gl.glClearColor(0.851f, 0.894f, 0.992f, 1f); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
    camera.update(); 

    stage.act(delta); 

    batch.setProjectionMatrix(camera.combined); 
    batch.begin(); 
    stage.draw(); 
    logoSprite.draw(batch); 
    batch.end(); 
} 

在這裏,我初始化相機和階段(stageHeight是int,這只是五分之三*屏幕的高度):

camera = new OrthographicCamera(); 
    camera.setToOrtho(false, SwapItGame.WIDTH, SwapItGame.HEIGHT); 
    stage = new Stage(); 
    stage.setViewport(1080, stageHeight, true, 0, 0, 1080, stageHeight); //The button part of the menu takes up 3 fifth of the Height of hte screen 
    stage.setCamera(camera); 

在這裏,我初始化我雪碧(對於精靈的位置值是相當複雜的,只是忽略它這是肯定的舞臺上。):

 logoSprite = skin.getSprite("logo"); 
     logoSprite.setPosition((SwapItGame.WIDTH-logoSprite.getWidth())/2, (SwapItGame.HEIGHT-stageHeight-logoSprite.getHeight())/2 + stageHeight); 

是不可能有一個雪碧和舞臺在同一屏幕上?或者我在做一些根本性錯誤?

+0

張貼代碼......否則,我們需要尋找到GLAS球,看看我們可以猜測 – BennX

+0

這是相當長的,但我當然會做,如果它可以幫助你。 – tomet

+0

然後只顯示渲染的部分和你添加精靈的部分。沒有代碼,我們不能幫助你,因爲我們沒有看到你做錯了什麼。 – BennX

回答

10

嘗試移動

stage.draw(); 

上面的批處理操作

stage.draw(); 
batch.setProjectionMatrix(camera.combined); 
batch.begin(); 
logoSprite.draw(batch); 
batch.end(); 
+0

這工作。謝謝。你能解釋它爲什麼有效嗎? – tomet

+4

是因爲舞臺有它自己的批次!所以你需要結束你的批處理,因爲你使用'stage.draw()'。否則你有批次的一致性。 – BennX

+0

我不確定:) batch.begin()batch.end()是在屏幕上繪製事物的代碼塊,我只是想到stage.draw()可能會影響這個過程 – taytay

1

我知道這是舊的,但在情況下,你不能或不想移動你的stage.draw( )方法,只需在stage.draw()之前調用batch.end(),然後立即重新啓動批處理...我在遊戲中爲不同的事情使用單獨的遊戲屏幕狀態,並嘗試移動我的stage.draw()它只是在我的課堂上打破了其他的東西,所以我最後只是嘗試了這個,它像一個魅力一樣工作,可能會有所幫助如果上述解決方案無法輕鬆工作的話。

batch.end(); 
stage.draw(); 
batch.begin();