解決:XNA 程式調試報錯 NullReferenceException was unhandled

來源:互聯網
上載者:User

NullReferenceException was unhandled

3D Graphics with xna Game studio 4.0
06 Skinned Model
學習筆記

經代碼跟蹤發現產生該問題的原因為程式在載入3D 模型後 model.Tag=null;引起下面這句編譯不能通過。
即下面的這句:
Model manModel = Content.Load<Model>("dude");
            skinnedModel = new SkinnedModel(manModel,
            Vector3.Zero, new Vector3(0, MathHelper.Pi, 0), new Vector3(10),
            GraphicsDevice, Content);

出錯的地方:
this.skinningData = model.Tag as SkinningData;

 

 

分析為模型載入沒有得到model.Tag值,懷疑為模型載入錯誤引起。

經過對比,發現本程式中產生的dude.xnb(在"bin\x86\Debug\Content"檔案夾中)比樣本程式產生的少。
後將樣本程式中的dude.xnb檔案複製到本程式中後,即可正常運行。

究其原因,是dude.fbx 屬性中的 素材處理器類 (content processor class)沒有選擇自訂專用的處理類,而是選用系統預設的素材處理類,如所示。

 

 

 

素材處理器類(content processor class)相關介紹:
http://shiba.hpe.sh.cn/jiaoyanzu/wuli/showArticle.aspx?articleId=363&classId=4
注意本例中的應選自訂的SkinnedModelProcessor類,用於將自訂的一些動畫資料存放區在
model.Tag中,否則如果選擇預設或別的素材處理類,將會出現 model.Tag=null;因為選擇預設的
素材處理器類他沒有進行這樣的處理。

參考:

   XNA的Model類有一個Tag屬性可以將自訂的資料添加到模型中。使用dictionary作為Tag屬性

,你可以將不同的自訂對象添加到Model類中,並可以即時通過使用string查詢到這些對象。

    注意你設定在ModelContent對象Tag屬性中的資料會一起儲存在二進位的XNB檔案中,當使用

content manager載入模型時這些資料會重新還原。

--

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.