• 在Ogre中加载自己的资源包


    由于数据保护的需要,一款游戏一般都会有自己独有的资源包,这样做既有利于知识产权的保护,又减少了磁盘碎片的产生。Ogre本身是支持的Zip包的,但Zip包不具要资源保护的特性,随便用个winrar就可以把资源打开并导出,这样就失去了数据保护的意义。

    现在假设你的操作资源包的API已经完成,下一步需要集成到OGRE中去,那么该怎么做呢,
    大致我机械式的列出下面几步,照着做一般就不会错。

    1. 继承Ogre::Archive 派生出新的,假设派生出 Ogre::XXXArchive

    2. Ogre::XXXArchive 中实现下面的虚函数bool isCaseSensitive(void)

    void load()
    void unload()
    DataStreamPtr open(const String& filename)
    StringVectorPtr list(bool recursive = true )
    FileInfoListPtr listFileInfo(bool recursive = true )
    StringVectorPtr find(const String& pattern, bool recursive = true)
    FileInfoListPtr findFileInfo(const String& pattern, bool recursive = true)
    bool exists(const String& filename)

    3. 继承Ogre::DataStream 派生出新的, 假设派生出 Ogre::XXXDataStream

    4. Ogre::XXXDataStream 中实现下面的虚函数

    size_t read(void* buf, size_t count);
    void skip(long count);
    void seek( size_t pos );
    size_t tell(void) const;
    bool eof(void) const;
    void close(void);

    5. 继承 Ogre::ArchiveFactory 派生出新的, 假设派生出 Ogre::XXXArchiveFactory

    6. Ogre::XXXArchiveFactory 中实现下面虚函数

    const String& getType(void) const
    Archive* createInstance( const String& name )

    7. 在OgreRoot.h 中注册我们新的资源包的加载
    在private成员中加入一个新的变量

    ArchiveFactory *mXXXArchiveFactory;

    代表你新的资源包的创建工厂

    8. 在OgreRoot.cpp 中加入相关代码

    mZipArchiveFactory = new ZipArchiveFactory();
    ArchiveManager::getSingleton().addArchiveFactory( mZipArchiveFactory );

    两句代码的下面加上,注册我们资源包的代码

    mXXXArchiveFactory = new XXXArchiveFactory();
    ArchiveManager::getSingleton().addArchiveFactory( mXXXArchiveFactory );

    关于XXXArchive, 和 XXXDataStream 的编写,可以参照 ZipArchive 和 ZipDataStream 照葫芦画瓢来做。

  • 相关阅读:
    如何从程序集中加载及卸载插件(下)
    Castle AOP 系列(四):实现一个简单的基于上下文调用的权限校验机制
    Castle AOP 系列(一):对类方法调用的拦截
    Mussel使用系列(六):分布式调用的牛刀小试
    新发现XmlNode中变态的地方
    我们发现你在XX邮箱的账号密码与其他网站被盗账号密码一致 请立即更改密码。
    html5 css3 新特性一览表
    [android] Http Post 请求
    [vs 使用技巧] VS2013显示行数 行号
    ORACLE数据库存储使用情况查询命令
  • 原文地址:https://www.cnblogs.com/minggoddess/p/1958472.html
Copyright © 2020-2023  润新知