【Cocos 2 d-xベースコンセプト】CCFileUtils-fullPathFromName


Cocos 2 d-x-API-詳細-CFIleUtils-fullPathFromName


注:本文中のpszは「(p)ointer to(s)tring,(z)ero-terminated」を表す.
このブログではcococos 2 d-xのCCFileUtilsのいくつかの関数の具体的な使い方を紹介します
CCSpriteFrameCacheや他の多くのリソースをロードする必要がある関数では、fullPathNameという関数が呼び出されています.この関数はfile not found問題を解決する最も重要な入り口と言えるので、詳しく説明します.

CCFileUtils::sharedFileUtils()->fullPathFromName(std::string pszFilename)


ファイル名に基づいて絶対パスを返す
最初のステップは、filenamelookup辞書に新しいファイル名(key-valueペアで検索)が見つかります.この新しいファイル名が見つからない場合は、元のファイル名を使用します.
2つ目は、設定した検索パスに基づいてfilenameを相対パスに追加します.
例:
検索パスの配列に("/mnt/sdcard/","internal_dir/")という2つの要素を追加し(setSearchPathsメソッドで)、異なる解像度に設定された配列に("resources-ipadhd/","resources-ipad/","resources-iphonehd")を追加します(setSearchResolutionsOrderメソッドで).前述のinternal_dirは、Resources/(アンドロイドではassests/)に対して、すなわち、最初の文字が/でない場合、最終的には、パスのデフォルトは相対パスである.'sprite.png'という画像があれば、「filenamelookup」辞書でsprite.png -> value: sprite.pvr.gz. まず最初にpng'を'spriteに置き換えます.pvr.gz′を検索し、次の方法でsprite eを検索します.pvr.gz:
    /mnt/sdcard/resources-ipadhd/sprite.pvr.gz      (if not found, search next)
    /mnt/sdcard/resources-ipad/sprite.pvr.gz        (if not found, search next)
    /mnt/sdcard/resources-iphonehd/sprite.pvr.gz    (if not found, search next)
    /mnt/sdcard/sprite.pvr.gz                       (if not found, search next)
    internal_dir/resources-ipadhd/sprite.pvr.gz     (if not found, search next)
    internal_dir/resources-ipad/sprite.pvr.gz       (if not found, search next)
    internal_dir/resources-iphonehd/sprite.pvr.gz   (if not found, search next)
    internal_dir/sprite.pvr.gz                      (if not found, return "sprite.png")

ファイル名に「gamescene/uilayer/sprite.png」のようなパスが含まれている場合、検索プロセスはこうなります.
     /mnt/sdcard/gamescene/uilayer/resources-ipadhd/sprite.pvr.gz      (if not found, search next)
     /mnt/sdcard/gamescene/uilayer/resources-ipad/sprite.pvr.gz        (if not found, search next)
     /mnt/sdcard/gamescene/uilayer/resources-iphonehd/sprite.pvr.gz    (if not found, search next)
     /mnt/sdcard/gamescene/uilayer/sprite.pvr.gz                       (if not found, search next)
     internal_dir/gamescene/uilayer/resources-ipadhd/sprite.pvr.gz     (if not found, search next)
     internal_dir/gamescene/uilayer/resources-ipad/sprite.pvr.gz       (if not found, search next)
     internal_dir/gamescene/uilayer/resources-iphonehd/sprite.pvr.gz   (if not found, search next)
     internal_dir/gamescene/uilayer/sprite.pvr.gz                      (if not found, return "gamescene/uilayer/sprite.png")

CCFileUtils::sharedFileUtils()->getSearchPaths()


stdを返します::vector、すべての検索パスを含む

CCFileUtils::sharedFileUtils()->setSearchPaths(std::string psz)


ゲーム初期化構成では、検索パス(スクリプトの位置、ピクチャの位置、オーディオの位置など)を指定する必要があります.

次の2つの関数は、異なる解像度のスクリーンに適したものであり、役に立ちます。


CCFileUtils::sharedFileUtils()->getSearchResolutionOrder()


CCFileUtils::sharedFileUtils()->setSearchResolutionOrder()