iPhoneとAndroidを共通の解像度で扱う

2014年3月4日

cocos2d-xは、クロスプラットフォームを謳っているのだから、
何か解像度を吸収するような仕組みがあるだろうと思っていたのですが、
最底辺なため、今までさっぱりわかりませんでした。
と、先日、以下のようなサイトを見つけましてこれで解決出来そうです。
http://gaomar.blog.fc2.com/blog-entry-5.html
AppDelegate.cpp内のapplicationDidFinishLaunching()で以下のような処理をすればいいんです。

...
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
CCEGLView* view = CCDirector::sharedDirector()->getOpenGLView();
CCSize frame = view->getFrameSize();
if (frame.height==1136.0) {
    // iPhone5などの解像度
    CCEGLView::sharedOpenGLView()->setDesignResolutionSize(640, 1136, kResolutionExactFit);
} else {
    CCEGLView::sharedOpenGLView()->setDesignResolutionSize(640, 960, kResolutionExactFit);
}
#else
// Android用
CCEGLView::sharedOpenGLView()->setDesignResolutionSize(640, 940, kResolutionExactFit);
#endif
...

kResolutionExactFitというのがミソでこいつで、うまく画像などを画面サイズに合わせてくれるようです。
試してみたところ、解像度が違う端末でもうまく行っているようです。
でもやっぱり、縦横比が違ったりするので、画像が微妙に伸縮されてしまい変になる場合があります。
個別にリソースを指定する方法もあるようなのですが、それはまた今度にします。
最底辺は、一度に沢山のものをやると混乱するので。

cocos2d-x

Posted by koheizi