现在的位置: 首页 > 综合 > 正文

解决:XNA 程序调试报错 NullReferenceException was unhandled

2011年03月25日 ⁄ 综合 ⁄ 共 1027字 ⁄ 字号 评论关闭

NullReferenceException was unhandled

3D Graphics with xna Game studio 4.0
06 Skinned Model
学习笔记

经代码跟踪发现产生该问题的原因为程序在加载三维模型后 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载入模型时这些数据会重新还原。

--

 

 

抱歉!评论已关闭.