2010-07-11 46 views
1

我想要一些2D精靈來遮擋一些3D DrawableGameComponents。對於一個簡單的例子,暫停菜單(實現爲2D精靈)應該繪製在暫停的太空船上(作爲3D遊戲組件實現)。可以在SpriteBatch繪製調用之前繪製XNA DrawableGameComponents,以便繪製在DrawableGameComponents之上的精靈?

XNA框架自動調用來自Microsoft.Xna.Framework.Game和Microsoft.Xna.Framework.DrawableGameComponent的類的Draw方法。

以我的經驗,我發現繪製順序是:

  1. 遊戲抽獎()方法
  2. DrawableGameComponent抽獎()方法

我spriteBatch繪製方法的調用都是平局我的Game類的方法。因此,太空飛船將被拖到暫停菜單的頂部(使其無法讀取)。

在我看來,解決我的問題最簡單的方法是顛倒繪製方法的順序。這可能嗎?

我已經嘗試將DrawOrder的DrawableGameComponents設置爲不同的值(1000,1,0,1,-1000),但它對Game和DrawableGameComponent實例之間的XNA框架Draw()方法調用順序沒有影響。

我已經查看了SpriteBatch Draw方法調用的layerDepth,但它們似乎與Game和DrawableGameComponent類之間的XNA Framework繪製順序無關。圖層深度似乎隻影響SpriteBatch中的精靈。

我是新來的使用XNA,但我懷疑我是問太多的框架。如果是這種情況,將2D對象放置在3D對象頂部的正常方法是什麼?

任何援助將不勝感激。

回答

3

出現了,因爲我用XNA一段時間,但我相信base.Draw()呼叫您Game類的Draw()方法將通過您的DrawableGameComponents迭代,所以你可以嘗試之前或在繪圖邏輯後,撥打這通電話你Draw方法取決於您希望發生呼叫的順序。

+0

沒錯!我不知道那個base.Draw()正在調用DrawableGameComponent的Draw()方法。移動繪圖邏輯上方的base.Draw()方法調用修改繪製順序。謝謝。 – 2010-07-11 07:41:49