2015-01-15 54 views
0


我很難確定如何在XNA中做些什麼。 我有這樣的事情:
XNA中的混合狀態

public void Draw() 
{ 
    spriteBatch.Begin(SpriteSortMode.FrontToBack, BlendState.AlphaBlend); 
    DrawFirstObject(); // Depth = 0.5f 
    spriteBatch.End(); 

    spriteBatch.Begin(SpriteSortMode.FrontToBack, BlendState.Additive); 
    DrawSecondObject(); // Depth = 0.2f 
    spriteBatch.End(); 
} 

基本上我需要有2個不同的spritebatch開始調用一個用的AlphaBlend和一個用添加劑BlendState。但問題是,當我做這件事時,第二次調用的繪製對象總是繪製在第一個繪製對象的頂部,而不是在他們需要的位置之後。我無法重新格式化我的代碼,因此第二個調用位於頂部,我需要保持深度順序。所以如果你有任何建議,我會很感激。

+0

爲什麼不能重新排序你的代碼?如果您想進行alpha混合,則必須首先繪製透明對象後面的對象。沒有(簡單)的方法。 –

+0

我不能重新排序我的代碼,因爲例如我有一個tilemap對象,它繪製了需要與alpha混合的tile,並且我在不同的深度繪製了tile並且我調用了Draw with Additive並繪製了一些粒子。這些粒子必須位於某些瓷磚之上並且位於其他瓷磚之上,但它們被繪製在一切之上 – Rokner

+0

然後,如果遇到狀態變化,則基本上需要對tile和粒子進行深度排序並動態分配spriteBatch.Begin()。對於最小狀態改變來說,優化這個排序過程可能是可能的,但這取決於你的場景。 –

回答

0

由於您在第一次Draw調用中使用透明圖像,理想情況下應該使用SpriteSortMode.BackToFront

SpriteSortMode