基于CrystalSpace的自定义插件的设计与实现.docxVIP

基于CrystalSpace的自定义插件的设计与实现.docx

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

?

?

基于CrystalSpace的自定义插件的设计与实现

?

?

论文导读:自定义插件的设计、实现及使用流程如图1所示。游戏引擎,基于CrystalSpace的自定义插件的设计与实现。

关键词:插件,软件复用,游戏引擎,CrystalSpace

?

1.CrystalSpace及其核心SCF

1.1CrystalSpace

在介绍CrystalSpace之前,首先介绍一下游戏引擎和3D游戏引擎,游戏引擎是用于控制所有游戏功能的主程序,从计算碰撞、物理系统和物体的相对位置,到接受玩家的输入,以及按照正确的音量输出声音等等,它是一个处理事务的系统,同时它也是一个控制模块,向所有的子系统发出命令[1]。而3D游戏引擎,除了包含游戏引擎的所有功能外,它还负责处理3D世界的数据结构(包括所有的光源、行动)以及从玩家或相机所在的视点渲染3D世界[1]。

CrystalSpace(以下简称CS)是一个开源的3D游戏引擎。除了具备3D游戏引擎应有的功能外,其自身还包含许多独有的特点。首先,CS的框架是一个高度模块化的框架,该框架能更好的为用户提供服务,并且使用户使用CS更方便。其次,CS是一个由构件和库组成的包,虽然它很多的功能都偏向于3D游戏的处理,但是它同样也适用于其他方面的应用,这主要是得益于CS中的大部分插件和库的相互独立性,这使得用户在CS中,可以只使用自己需要的插件以及自定义插件,而不会与其他插件相关联或受到其他插件的影响。科技论文,游戏引擎。最后,CS广泛的支持各种不同类型的硬件和软件平台,具有很好的跨平台性[2]。科技论文,游戏引擎。

1.2SCF

由于CS高度模块化的框架,而作为其框架核心的SCF(ShareClassFacility,共享类工具)为用户设计与开发基于CS的自定义插件提供了便利。科技论文,游戏引擎。SCF与COM(ComponentObjectModel,组件对象模型)[4]类似,但只是一个轻量级的COM。SCF与COM相比,其使用更加简单、方便,并且SCF屏蔽了COM中很多繁琐的部分,却同时具备COM的大部分优势[3]。

在CrystalSpace中SCF用来管理引用计数、系统插件、自定义插件和抽象接口。在插件的开发中,SCF技术实现了类接口与类实现的分离,这一方面,使插件使用者只用关心类接口的功能及接口的使用方法,而不用关心它的具体实现;另一方面,它对类实现进行了很好的封装,不会将类实现的任何细节暴露给用户,并且插件开发者对类实现的修改不会对插件的使用造成影响[2]。另外,SCF还提供了插件对象注册器和插件管理器使CS能自动的完成对插件的管理,用户只需要书写少量的代码就能实现对插件的加载、使用及卸载。

2.设计和使用自定义插件

自定义插件的设计、实现及使用流程如图1所示,用户自定义插件设计时,必须在SCF中的对象注册器中注册,并由插件管理器统一管理,而应用程序对插件的调用及加载也必须通过对象注册器和插件管理器来完成。

图1自定义插件的设计、实现及使用流程

2.1设计自定义插件

用户自定义插件的实现包括定义插件的API,自定义插件的具体实现,自定义插件的编译及自定义插件的注册四个部分。

1)定义用户自定义插件的API

在CrystalSpace中,使用SCF定义插件的API,其优势在于,将接口的定义和实现进行明确的分离。操作步骤包括:

Ⅰ.定义插件API所在文件“Myapi.h”

Ⅱ.定义API的版本号;

Ⅲ.定义抽象类“iMyApi”,类名以“i”开头,用于标识该类是一个SCF接口。

Ⅳ.定义两个纯虚函数DoSomthing()和GetSomething()用于设置/获得一个3D坐标。下面是API定义的具体代码:

structiMyApi:publicvirtualiBase

{SCF_INTERFACE(iMyApi,1,0,0);

virtualvoidDoSomething(intparam,constcsVector3)=0;

virtualintGetSomething()const=0;};

2)创建自定义插件的实现(头文件)

下面是用户自定义插件具体实现的头文件“myplug.h”的定义。其操作步骤包括:

Ⅰ.实现类必须同时继承iMyApi和iComponent接口,以保证能使用插件管理器来管理插件。

Ⅱ.定义初始化函数,用于完成插件的初始化工作。具体代码如下:

classMyPlugin:publicscfImplementation2MyPlugin,iMyApi,iComponent

{…………

virtualboolInitialize(iObjectRegistry*);

vi

文档评论(0)

186****6075 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档