引入路径搜索类的头文件为:#include "vpSearchPath.h"。
路径搜索类视图如图6.5.1所示。在场景中加载的对象主要是物体,而物体很有可能是以文件形式储存在某个位置。如何来管理对象的路径呢?Vega Prime 提供了vpSearchPath对象来完成这个功能。在这个应用中,对象都储存于VegaPrime 安装目录下的某个子目录中,所以在配置物体路径时采用了以下代码:
图6.5.1 路径搜索类继承图
PublicMember::CTS_pSearchPath=vpSearchPath::instance();
PublicMember::CTS_pSearchPath->append("C:/Program Files/MultiGen-Paradigm/resources /tutorials/vegaprime/desktop_tutor/tornado/data/land");
PublicMember::CTS_pSearchPath->append("C:/Program Files/MultiGen-Paradigm/resources /tutorials/vegaprime/desktop_tutor/tornado/data/farmhouse");
PublicMember::CTS_pSearchPath->append("C:/Program Files/MultiGen-Paradigm/resources /tutorials/vegaprime/desktop_tutor/tornado/data/humv-dirty");
PublicMember::CTS_pSearchPath->append("C:/Program Files/MultiGen-Paradigm/resources /tutorials/vegaprime/desktop_tutor/tornado/data/grainstorage");
从代码中可以看出,使用了绝对路径,这样就限制了对物体对象的管理和加载,更不便于物体和程序的统一发布管理,须进行必要的处理。把"C:/Program Files/MultiGen-Paradigm/ resources/tutorials/vegaprime/desktop_tutor/tornado/data"目录复制到应用程序VPTestDialog 目录下,这样,只要获取当前程序所在的目录,再加上data 目录,就能得到物体的路径。
首先,为PublicMember 类添加一个静态数据成员:
static CString CTS_RunPath; //存储程序运行路径
然后,利用下面的代码获取程序所在的路径:(www.daowen.com)
char buf[MAX_PATH];
::GetCurrentDirectory(MAX_PATH,buf);
PublicMember::CTS_RunPath.Format("%s",buf);
做完这些工作,就可以把原来的路径搜索代码替换为以下代码:
PublicMember::CTS_pSearchPath=vpSearchPath::instance();
PublicMember::CTS_pSearchPath->append(PublicMember::CTS_RunPath +"/data/land");
PublicMember::CTS_pSearchPath->append(PublicMember::CTS_RunPath+"/data/farmhouse");
PublicMember::CTS_pSearchPath->append(PublicMember::CTS_RunPath+"/data/humv-dirty");
PublicMember::CTS_pSearchPath->append(PublicMember::CTS_RunPath+"/data/grainstorage");
在进行了这样的路径配置之后,对物体的管理和应用就与应用程序的管理和应用统一了起来,非常灵活方便,特别是在动态加载物体对象时非常方便。当然,这样配置就要求data目录与可执行文件必须在同一个目录中。例如,如果要在VPTestDialog 目录中找到Release目录,直接运行VPTestDialog.exe 文件,就要求把data 目录复制到Release 目录下。
当然,只要真正明白了Vega Prime 目录对象的作用,就可以灵活地配置和管理目录。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。