zoukankan      html  css  js  c++  java
  • 解决:XNA 程序调试报错 NullReferenceException was unhandled

    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载入模型时这些数据会重新还原。

    --

  • 相关阅读:
    数据库连接池大小
    java的关闭钩子(Shutdown Hook)
    为线程池中的每个线程设置UncaughtExceptionHandler
    java 线程的interrupt和sleep、wait
    中断
    NIO
    VMware 安装 VMware Tools 工具
    php 雪花算法
    python 执行系统文件
    php curl 获取响应头
  • 原文地址:https://www.cnblogs.com/furenjun/p/xnaShinnedModel.html
Copyright © 2011-2022 走看看