2013-05-15 70 views
1

我有點複雜的問題,並且導致我出來的想法我又來了。從另一個項目中缺少對XNA ContentManager的訪問

我工作的應用程序生成從任何3D引擎的鏡頭,我(不幸)建議XNA做到這一點,因爲我們想在C#中創建應用程序。我想用XNA代碼(以界面的形式)向我的編程伴侶發送一個庫,這樣他甚至不必知道圖像是如何生成的。

這是我的問題 - 我無法加載我的場景模型和紋理原因contentmanager不是在圖書館項目,雖然我沒有分開運行xna遊戲的問題。

因此,這裏是我的問題:

  1. 是可以接取/加載內容,因此可用作/在圖書館?
  2. 有什麼庫可以生成3D場景(在C#中),你可以推薦?

任何幫助將不勝感激。

回答

1

是的,可以加載庫項目中的內容。您可以在Game類之外創建ContentManager的實例,並使用它來加載您的內容。

創建ContentManager的新實例的技巧是兩個構造函數,它們都接受IServiceProvidor作爲第一個參數的實例。無論您正在創建ContentManager的哪個課程都可以實現此界面。只有一個你需要從這個接口來實現的方法,那就是:

public object GetService(Type serviceType) 

它將由ContentManager以檢索IGraphicsDeviceService實例調用。您需要一個可以實現此接口的類,這個接口主要是與設備創建和銷燬有關的事件。還有就是需要實現一個重要的特性,那就是:

public GraphicsDevice GraphicsDevice 

我要留下很多這個答案的樣板代碼OUF的,因爲你可以在internetz在別的地方找到。下面的代碼假定你已經初始化的XNA圖形系統和創建該類

public class ImageGenerator : IServiceProvider, IGraphicsDeviceService 
{ 
    public GraphicsDevice GraphicsDevice { get; private set; } 
    public ContentManager ContentManager { get; private set; } 

    public ImageGenerator(GraphicsDevice device) 
    { 
     this.GraphicsDevice = device; 
     this.ContentManager = new ContentManager(this); 
    } 

    public object GetService(Type serviceType) 
    { 
     if (serviceType == typeof(IGraphicsDeviceService)) 
     { 
      return this; 
     } 
     return null; 
    } 
    public event EventHandler<EventArgs> DeviceCreated; 

    public event EventHandler<EventArgs> DeviceDisposing; 

    public event EventHandler<EventArgs> DeviceReset; 

    public event EventHandler<EventArgs> DeviceResetting; 
} 

的情況下,之前但是走這路線之前創建一個GraphicsDevice,我建議你調查繼承Game並允許XNA框架處理重提升,你可以擔心渲染場景和創建圖像。

Axiom(http://www.axiom3d.net)是一種C#引擎,能夠爲位圖圖像生成3D場景。

+0

嗯,這將是偉大的,我一定會檢查這一點,謝謝你的迴應,並等待樣品! – ShirouWrath

相關問題