角色注册主要通过继承自类dtDAL::ActorPluginRegistry类来实现,重写其中的RegisterActorTypes()即可;在对象工厂ObjectFactory中保存了“角色类型到负责创建角色对象的全局函数”的Map;

关键函数有:

 dtCore::RefPtr<BaseActorObject> ActorPluginRegistry::CreateActor(const ActorType& type){dtCore::RefPtr<BaseActorObject> proxy = mActorFactory->CreateObject(dtCore::RefPtr<const ActorType>(&type));proxy->Init(type);proxy->InitDefaults();return proxy;}
void XXGameActorsRegistry::RegisterActorTypes()
{
XXActorType = new
dtDAL::ActorType("XX","TutorialActors",
"Simple tank that moves and acts like a basic hover craft.");
mActorFactory->RegisterType<XXActorProxy>(XXActorType.
get());
}


在动态链接库Dll中导出全局函数:
extern "C" TUTORIAL_HOVER_EXPORT dtDAL::ActorPluginRegistry*
CreatePluginRegistry()
{
return new TutorialGameActorsRegistry();
}
/
//
extern "C" TUTORIAL_HOVER_EXPORT void
DestroyPluginRegistry(dtDAL::ActorPluginRegistry *registry)
{
delete registry;
}

核心了对象工厂实现代码如下:
template<typename BaseType, typename DerivedType>BaseType *construct(){return new DerivedType();}/*** This class is a template object factory.  It allows one to* create any type of object as long as there is a common base* class.  The common base class is defined on a per-factory* basis using the templated parameter <code>BaseType</code>.* @note*   The ObjectFactory implementation only supports objects with*   a default constructor.  It will not work with objects that*   only have named constructors.*/template<typename UniqueIdTypeClass,typename BaseTypeClass,typename ltCmpClass=std::less<UniqueIdTypeClass> >class ObjectFactory : public osg::Referenced{public:typedef UniqueIdTypeClass UniqueIdType;typedef BaseTypeClass BaseType;typedef ltCmpClass ltCmp;typedef BaseType *(*createObjectFunc)(); /// Function pointer type for functions creating objects.typedef std::map<UniqueIdType,createObjectFunc,ltCmp> ObjectMap;typedef typename ObjectMap::iterator ObjTypeItor;typedef typename ObjectMap::const_iterator ObjTypeItorConst;ObjectFactory() {}  // constructorprotected:virtual ~ObjectFactory() {}public:/*** Registers a new type of object with the factory.* @return false if the type is a duplicate.*/template<typename DerivedType>bool RegisterType(UniqueIdType id){if (this->objectTypeMap.find(id) != this->objectTypeMap.end()){return false;}this->objectTypeMap[id] = &construct<BaseType,DerivedType>;return true;}/*** Removes an existing object type from the factory's known list* of object types.*/void RemoveType(UniqueIdType id) {this->objectTypeMap.erase(id);}/*** Checks to see if the factory can create objects of the given type.* @param id The type of object to check for.* @return True if the type is supported, false otherwise.*/bool IsTypeSupported(UniqueIdType id) const{ObjTypeItorConst itor(this->objectTypeMap.find(id));if (itor != this->objectTypeMap.end()){return true;}else{return false;}}/*** Gets a list of types that this factory knows how to create.*/void GetSupportedTypes(std::vector<UniqueIdType> &types) const{types.clear();for (ObjTypeItorConst itor=this->objectTypeMap.begin();itor != this->objectTypeMap.end(); ++itor){types.push_back(itor->first);}}/*** Creates a new object.* @param id - Type of object to create.* @return Returns a pointer to the newly created object or NULL if the given id has not been registered.* @throw Exception is thrown if the factory does not know how to create*  the requested type.*/BaseType* CreateObject(const UniqueIdType id) const{ObjTypeItorConst itor(this->objectTypeMap.find(id));// We cannot create a new object if we do not know what type it is// so throw an exception.if (itor == this->objectTypeMap.end()){return NULL;}return (itor->second)();}const ObjectMap& GetMap() const { return objectTypeMap; }private:///Maps a unique id to a function pointer that when called creates an///object of the appropriate type.ObjectMap objectTypeMap;};
												

Delta3d角色注册机制相关推荐

  1. MIDP2.0引入了Push注册机制

    Push MIDP2.0引入了Push注册机制,作为一种允许应用被自动启动的方法,由预先设置的警告或者经inbound连接收到的消息. 通过这种方法,MIDlets可以用来设置处理规则事件,如定时从服 ...

  2. C#实现软件授权,限定MAC运行(软件license管理,简单软件注册机制)

    一个绿色免安装软件,领导临时要求加个注册机制,不能让现场工程师随意复制.事出突然,只能在现场开发(离开现场软件就不受我们控了).花了不到两个小时实现了简单的注册机制,稍作整理.  基本原理:1.软件一 ...

  3. TensorFlow中的设备管理——Device的创建与注册机制

    背景 [作者:DeepLearningStack,阿里巴巴算法工程师,开源TensorFlow Contributor] 作为一款优秀的异构深度学习算法框架,TensorFlow可以在多种设备上运行算 ...

  4. C#软件license管理(简单软件注册机制)

    最近做了一个绿色免安装软件,领导临时要求加个注册机制,不能让现场工程师随意复制.事出突然,只能在现场开发(离开现场软件就不受我们控了).花了不到两个小时实现了简单的注册机制,稍作整理.         ...

  5. 软件加密技术和注册机制加密基础(转)

    软件加密技术和注册机制加密基础 本文是一篇软件加密技术的基础性文章,简要介绍了软件加密的一些基本常识和一些加密产品,适用于国内软件开发商或者个人共享软件开发者阅读参考. 1.加密技术概述 一个密码系统 ...

  6. Android逆向移花接木之添加注册机制

    前言 我们知道借助apktool对apk的反编译几乎是无损源码级别的,所以要想在无源码的情况下,让某个软件实现想要的显示或者功能,只需要先写个简单的具有该显示和功能的DEMO,然后将关键的代码镶嵌到目 ...

  7. vue-router 源码阅读 - 文件结构与注册机制

    文章目录 0. 前备知识 1. 文件结构 2. 入口文件 2.1 rollup 出口与入口 2.2 Vue.use 3. 路由注册 3.1 install 3.2 VueRouter 前端路由是我们前 ...

  8. Citrix XenDesktop 中VDA向DDC注册机制解析

    直接切入正题吧,至于什么是VDA?什么是DDC之类的我就不用做过多介绍了. 众所周知用户如果需要使用虚拟桌面,那么必须将虚拟桌面部署在DDC的交付组中并将虚拟桌面交付给用户.而且虚拟桌面在DDC中是已 ...

  9. 学会软件破解,让注册机制形同虚设

    一.    修改注册表文件,清除软件使用次数限制. 打开软件,首先跳出来一个注册的框,其中用户名可以随便填写.左下角红色的字显示还可以试用的次数.点击试用以后,可以进入软件.但是试用总共有100次.我 ...

最新文章

  1. Script:收集UNDO诊断信息
  2. fgets()用法笔记
  3. vc richedit 指定光标位置_机械图纸·每日一符:位置度
  4. WdatePicker,js日期插件 ,时间相加
  5. 通过libVirt抓取kvm虚拟机监控指标数据
  6. OPenGL模板缓冲区示例程序
  7. tomcat启动之后,Chrome浏览器可以访问,IE不行(IE无法访问8080 端口)
  8. html5快手视频播放源码,快手视频解析源码
  9. ubantu分区知识
  10. 残差网络resnet网络原理详解
  11. Photoshop如何调整图层大小?PS调整图层大小快捷键
  12. Google Chrome v90.0.4430.212 正式版下载
  13. [唐诗]杳杳寒山道-寒山
  14. replace语句的使用---鸡肋命令
  15. php反序列化漏洞 freebuf,入门Web需要了解的PHP反序列化漏洞
  16. 中国大学MOOC C语言程序设计(大连理工大学) 课后编程题 第九周题解(个人向仅供参考)
  17. 计算机等级考试php,计算机等级考试查询系统
  18. vscode+platformio IDE+sdcc搭建51单片机开发环境(win764)
  19. Win11 没有磁盘清理工具,如何清理磁盘旧的windows.old文件
  20. 160个CrackMe 028 Cosh.2

热门文章

  1. 现代软件工程系列 学生的精彩文章 (1)
  2. 开发软件不是闭卷考试
  3. php fckeditor demo,如何使用PHP添加fckeditor
  4. yoga710怎么进入bios_【解读YOGA——BIOS篇】找回消失掉的BIOS,YOGA BIOS详解!
  5. 上海电力学院计算机技术,上海电力学院计算机与信息工程学院介绍
  6. android平板截屏方法,Android 各种截屏方法
  7. python虚拟环境 pyenv_Python 虚拟环境 pyenv、venv(pyvenv)、virtualenv之间的区别
  8. 83998 连接服务器出错_来申请一个阿里云服务器玩玩?
  9. java接口文档生成工具_接口文档生成
  10. mysql5.7 存储二进制_mysql5.7二进制部署