Cpper
C/C++高级工程师 Android高级软件工程师 IT集成工程师 音频工程师 熟悉c,c++,java,c#,py,js,asp等多种语言 程序猿
本着简单,易用的设计原则
我给盖莫引擎加入了一个简单的插件系统
插件基类如下:
class Plugin : public virtual RefCount 
{
public:
    
virtual ~Plugin(){}
    
virtual PLUGIN_FORMAT GetFormat()const  = 0;
    
virtual engine_string GetMaker()const = 0;
    
virtual engine_string GetDescription()const = 0;
    
virtual void  GetVersion(int &main,int &sub,int &pitch) = 0;
private:    
    
virtual bool Init(void* data) = 0;
    
virtual void Deinit(void* data) = 0;
    friend 
class PluginFactory;
};

可以看出基本的插件方法有获取插件格式,插件作者,插件描述,插件版本等
下面的是简单的插件工厂
////////////////////////////////////////////////////////////
/// 定义引擎插件工厂(管理器)
////////////////////////////////////////////////////////////
class GAPI PluginFactory : public Singleton<PluginFactory>
{
public:
    
bool RegisterPlugin(Plugin* plugin);
    
void UnRegisterPlugin(Plugin* plugin);
};
这是一个简单的单件
它只有2个函数注册和反注册插件
使用的时候只要获取插件指针
然后传入插件工厂注册之后即可使用
(注册的本质就是根据插件类型设置必要的插件上下文数据)

这种插件方法有它的弊端 不过在我看来最大的好处就是简单咯

下面是简单的视频播放插件咯
////////////////////////////////////////////////////////////
/// 定义引擎视频播放器(全局唯一)
////////////////////////////////////////////////////////////
class VideoPlayer : public Plugin
{
public
    
///////////////////////////////////////////////////////
    
/// 构造,析构视频播放器
    
///////////////////////////////////////////////////////
    VideoPlayer(){}
    
virtual ~VideoPlayer(){}
       
///////////////////////////////////////////////////////
    
/// 播放指定视频
    
///////////////////////////////////////////////////////
    virtual bool Play(const engine_string& video) = 0
    
    
///////////////////////////////////////////////////////
    
/// 视频更新每帧调用 
    
///////////////////////////////////////////////////////    
    virtual bool Update() = 0
    
    
///////////////////////////////////////////////////////
    
/// 停止并卸载视频
    
///////////////////////////////////////////////////////
    virtual void Stop() = 0
    
    
///////////////////////////////////////////////////////
    
/// 获取,设置视频当前音量(0-1)
    
///////////////////////////////////////////////////////    
    virtual float GetVolume()const = 0
    
virtual void  SetVolume(float volume) = 0;
};

posted on 2010-06-23 14:10 ccsdu2009 阅读(1560) 评论(0)  编辑 收藏 引用 所属分类: Game引擎

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理