码迷,mamicode.com
首页 > 系统相关 > 详细

textureCache中的等价路径问题

时间:2015-04-08 21:17:18      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:

自己的引擎里做了个简单的TextueCache,每次新创建一个纹理,先到TextureCache里查找有没有路径相同的,如果有就直接返回纹理,如果没有加载图片创建纹理并将图片路径缓存起来。另外为了标准统一,我们可以规定路径都转化成全路径(full path)再缓存。

不过发现对于使用了返回父级符号 ../ 的路径,这样简单处理是有问题的,比如 a/b/../x.png 和 a/c/../x.png 这两个路径,形式上不同,实际上却是等价。为了解决这个问题,我们在缓存路径的时候仍然缓存原始全路径,但是在做两个全路径比较时要先将两个全路径都转成不带 ../ 符号的形式再比较。代码如下:

   bool isPathEqual(const string&fullPath1,const string&fullPath2){//fullPath1 and fullPath2 must be full path

        string path1=convertToDirectPath(fullPath1);

        string path2=convertToDirectPath(fullPath2);

        const int path1Len=(int)path1.size();

        const int path2Len=(int)path2.size();

        if(path1Len!=path2Len)return false;

        for(int i=0;i<path1Len;i++){

            if(path1[i]==‘/‘||path1[i]==‘\\‘){

                if(path2[i]==‘/‘||path2[i]==‘\\‘){

                    //ok

                }else{

                    return false;

                }

            }else{

                if(path1[i]!=path2[i])return false;

            }

        }

        return true;

    }

    string convertToDirectPath(const string&path){//convert path to equivalent form but without ../

        string pathDirect;

        for(int i=0;i<(int)path.size();i++){

            if(i+3<(int)path.size()

               &&(path[i]==‘/‘||path[i]==‘\\‘)

               &&path[i+1]==‘.‘

               &&path[i+2]==‘.‘

               &&(path[i+3]==‘/‘||path[i+3]==‘\\‘))

            {

                for(int j=(int)pathDirect.size()-1;j>=0;j--){

                    if(pathDirect[j]==‘/‘||pathDirect[j]==‘\\‘){

                        pathDirect.resize(j+1);

                        break;

                    }

                }

                i+=3;

                assert(path[i]==‘/‘||path[i]==‘\\‘);

            }else{

                pathDirect=pathDirect+path[i];

            }

        }//got pathDirect

        return pathDirect;

    }

不知道cocos2dx里的TextureCache有没有考虑这种情况,等有时间看下。

textureCache中的等价路径问题

标签:

原文地址:http://www.cnblogs.com/wantnon/p/4403571.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!