拙い英語力でなんとかcocos2d-xの勉強を進めているんですが、「Your First Game」という初っ端のサンプルの最初の設定で早くもエラーが出まくって“詰み“気味の今日このごろ。
「チェックメイト!」とでも叫びたいところですが、なんとか対応してみました。
問題となったのは、「Time for action – adding retina support」の章で追加したコード。
リソースフォルダを指定するsetResourceDirectory
というメソッドに、
No member named ‘setResourceDirectory’ in’cocos2d::CFileUtils
というメッセージが返ってきてしまいます。
どうやら、書籍の方はcocos2d-xのバージョンが古い様子。
頑張って最新のコードで書き換えてみました。
修正版のソース
// initialize director
CCDirector* pDirector = CCDirector::sharedDirector();
CCEGLView* pEGLView = CCEGLView::sharedOpenGLView();
pDirector->setOpenGLView(pEGLView);
CCSize screenSize = pEGLView->FrameSize();
CCEGLView::sharedOpenGLView()->setDesignResolutionSize(768, 1024, kResolutionExactFit);
std::vector<std::string> searchPaths;
if (screenSize.width > 768) {
// CCFileUtils::sharedFileUtils()->setResourceDirectory("hd");
searchPaths.push_back("hd");
pDirector->setContentScaleFactor(2);
} else {
// CCFileUtils::sharedFileUtils()->setResourceDirectory("sd");
searchPaths.push_back("sd");
pDirector->setContentScaleFactor(1);
}
CCFileUtils::sharedFileUtils()->setSearchPaths(searchPaths);
// 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 = HelloWorld::scene();
// run
pDirector->runWithScene(pScene);
return true;
}
[/cpp]
簡単に言うと、setResourceDirectory
をsetSearchPaths
に置き換えているわけです。
が、現状のソースだと、解像度の数字が直接ソース内に書かれていて、あんまり綺麗ではない気が。
Androidの解像度への対応なども考えたり、将来より高解像度の端末が出た時の対応なんかを考えると、もう少しメンテナンスがしやすいコードにしていおきたいところ。
というわけで、更に以下のように修正してみます。
まずは、解像度の数値は別ファイルとして持たせます。
もちろん、AppDelegate.cpp内に書いても問題は無いです。
{
cocos2d::CCSize size;
char directory[100];
}Resource;
static Resource smallResource = { cocos2d::CCSizeMake( 384, 512), "sd"};
static Resource largeResource = { cocos2d::CCSizeMake( 768, 1024), "hd"};
static cocos2d::CCSize designResolutionSize = cocos2d::CCSizeMake(768, 1024);
[/cpp]
上記ファイルはAppDelegete.cpp内でincludeしつつ、AppDelegate::applicationDidFinishLaunching()
を以下のように書き換えます。
// initialize director
CCDirector* pDirector = CCDirector::sharedDirector();
CCEGLView* pEGLView = CCEGLView::sharedOpenGLView();
pDirector->setOpenGLView(pEGLView);
CCSize screenSize = pEGLView->getFrameSize();
// CCEGLView::sharedOpenGLView()->setDesignResolutionSize(768, 1024, kResolutionExactFit);
pEGLView->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, kResolutionExactFit);
std::vector<std::string> searchPaths;
// if (screenSize.width > 768) {
if (frameSize.width > largeResource.size.height) {
// searchPaths.push_back("hd");
// pDirector->setContentScaleFactor(2);
searchPath.push_back(largeResource.directory);
pDirector->setContentScaleFactor(largeResource.size.width / designResolutionSize.width);
} else {
// searchPaths.push_back("sd");
// pDirector->setContentScaleFactor(1);
searchPath.push_back(smallResource.directory);
pDirector->setContentScaleFactor(smallResource.size.width / designResolutionSize.width);
}
CCFileUtils::sharedFileUtils()->setSearchPaths(searchPaths);
// turn on display FPS
pDirector->setDisplayStats(true);
// set FPS. the default value is 1.0/60 if you don’t call this
pDirector->gt;setAnimationInterval(1.0 / 60);
// create a scene. it’s an autorelease object
CCScene *pScene = HelloWorld::scene();
// run
pDirector->runWithScene(pScene);
return true;
}
[/cpp]
単純に書籍のサンプルのエラーを消すだけだったらコード内に数字をガリガリ書いても問題ないとは思いますが、こういう汎用向けな書き方も参考までに!
![]() |
Cocos2d-x by Example Beginner's Guide Roger Engelbert Packt Publishing |
コメントを残す