Cocos2d-x マルチレゾリューション対応でハマったこと
Androidはちゃんと画面サイズに応じて「L」,「M」,「S」のディレクトリから画像を読み込むようになっているのになぜかiOSがうまく行かない・・・という状況。
AppDelegate.cppのソース抜粋
マルチレゾリューション対応してます。 getFrameSizeで取得したサイズを元にどの画像を表示するか選択する。
bool AppDelegate::applicationDidFinishLaunching() { // initialize director CCDirector* pDirector = CCDirector::sharedDirector(); CCEGLView* pEGLView = CCEGLView::sharedOpenGLView(); pDirector->setOpenGLView(pEGLView); // デザインサイズの設定 pEGLView->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, kResolutionNoBorder); CCSize frameSize = pEGLView->getFrameSize(); CCLog("frameSize = width : %f height : %f", frameSize.width, frameSize.height); CCSize winSize = pDirector->getWinSize(); CCLog("winSize = width : %f height : %f", winSize.width, winSize.height); std::vector<std::string> searchPath; if (frameSize.height > mediumResource.size.height) { // [L]ディレクトリのリソースを使用 searchPath.push_back(largeResource.directory); float largeMin = MIN(largeResource.size.height / designResolutionSize.height, largeResource.size.width / designResolutionSize.width); pDirector->setContentScaleFactor(largeMin); CCLog("L(%f)", largeMin); } else if (frameSize.height > smallResource.size.height) { // [M]ディレクトリのリソースを使用 searchPath.push_back(mediumResource.directory); float mediumMin = MIN(mediumResource.size.height / designResolutionSize.height, mediumResource.size.width / designResolutionSize.width); pDirector->setContentScaleFactor(mediumMin); CCLog("M(%f)", mediumMin); } else { // [S]ディレクトリのリソースを使用 searchPath.push_back(smallResource.directory); float smallMin = MIN(smallResource.size.height / designResolutionSize.height, smallResource.size.width / designResolutionSize.width); pDirector->setContentScaleFactor(smallMin); CCLog("S(%f)", smallMin); } // リソースディレクトリを指定 CCFileUtils::sharedFileUtils()->setSearchPaths(searchPath); // turn on display FPS pDirector->setDisplayStats(true); // set FPS. the default value is 1.0/60 if you don't call this pDirector->setAnimationInterval(1.0 / 60); // create a scene. it's an autorelease object CCScene *pScene = TitleScene::scene(); // run pDirector->runWithScene(pScene); return true; }
L,M,Sのリソースをaddするときに問題があった
シュミレーターが悪いのかなー?とか色々調べていたが、 挙動からしてどうも探す場所をちゃんと選べていない様子(一部だけ「L」だったり「M」だったり)
Cocos2d-xのwikiをsearchPathで検索したらこんなページを発見。
http://www.cocos2d-x.org/projects/cocos2d-x/wiki/Mechanism_of_loading_resources
まさかと思ってみたら Resource下のフォルダ名が上記wikiのように黄色フォルダになってる。 (xcode上で見やすいようにフォルダ表示されているだけ)
あらためてadd Files する
ちゃんとフォルダ階層もaddしてあげる必要がある。
Create folder references for any added folders
を選択するとよい。
こんな感じに青いディレクトリになってたらOK
これで無事適切な画像サイズを読み込むようになりました。
まあ今回の問題は、ぶっちゃけcocos2d-x関係ないんですよね・・・ そもそもXcodeちゃんと使いこなせてないという体たらくww