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。但問題是,當我做這件事時,第二次調用的繪製對象總是繪製在第一個繪製對象的頂部,而不是在他們需要的位置之後。我無法重新格式化我的代碼,因此第二個調用位於頂部,我需要保持深度順序。所以如果你有任何建議,我會很感激。
爲什麼不能重新排序你的代碼?如果您想進行alpha混合,則必須首先繪製透明對象後面的對象。沒有(簡單)的方法。 –
我不能重新排序我的代碼,因爲例如我有一個tilemap對象,它繪製了需要與alpha混合的tile,並且我在不同的深度繪製了tile並且我調用了Draw with Additive並繪製了一些粒子。這些粒子必須位於某些瓷磚之上並且位於其他瓷磚之上,但它們被繪製在一切之上 – Rokner
然後,如果遇到狀態變化,則基本上需要對tile和粒子進行深度排序並動態分配spriteBatch.Begin()。對於最小狀態改變來說,優化這個排序過程可能是可能的,但這取決於你的場景。 –