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


    转自:http://www.cnblogs.com/minggoddess/archive/2011/02/19/1958472.html

    由于数据保护的需要,一款游戏一般都会有自己独有的资源包,这样做既有利于知识产权的保护,又减少了磁盘碎片的产生。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 照葫芦画瓢来做。

  • 相关阅读:
    RichEdit
    用 RAD Studio 柏林版创建 IoT 应用程序
    延时程序
    SQL if exists用法
    Firemonkey限制TEdit只能输入数字的完美方法
    leetcode 树
    leetcode string
    clone-graph
    surrounded-regions merge-intervals
    leetcode链表题
  • 原文地址:https://www.cnblogs.com/lc-cnblong/p/3797630.html
Copyright © 2020-2023  润新知