cocos2dでのRetinaDisplay対応時の注意点&追記

cocos2dでのRetinaDisplay対応法

割とアクセスが高かったエントリーですが、もっと簡単なやり方でRetinaに対応できることがわかったため、追記いたします。


cocos2d for iPhone(Ver. 0.99.5)でRetinaディスプレイ対応

Retinaへの道


1、cocos2dで新規プロジェクトを作成し、AppDelegate.mの

// Enables High Res mode (Retina Display) on iPhone 4 and maintains low res on all other devices
	
if( ! [director enableRetinaDisplay:YES] )
	CCLOG(@"Retina Display Not supported");


部分のコメントアウトを外す。



2、Retina用の画像には、末尾に、「-hd」を付ける

前回の記事との違い


cocos2dでのRetinaDisplay対応法


前回の記事では、


if ([UIScreen instancesRespondToSelector:@selector(scale)] )
		[[CCDirector sharedDirector] setContentScaleFactor:[[UIScreen mainScreen] scale]];


をAppDelegate.mに追加すると書いたのですが、別に追加しなくてもRetinaとの出し分けは行ってくれます。

注意点!

Retina画像と、通常の画像の2種類をアプリのResourcesフォルダにいれると、アプリがめちゃくちゃ重くなってしまうことに気づいたので、

Retina非対応の場合でも、Retina用の画像を縮小させて表示させることにしました。


そのとき、Retinaかそうでないかを、

if( ! [director enableRetinaDisplay:NO] )

というようにして場合分けしていたら、Retinaの出し分けが急にうまくいかなくなってしまいました。


このかたとまったく同じ症状ですね。


http://lowbattery.blog104.fc2.com/blog-entry-18.html


どこかで、ひとつでもNOとしてしまうと、Retina非対応となってしまうようです。。


なので、Retinaかそうでないかを場合分けするときは、

- (B00L) isRetinaDevice {
        if (![UIScreen instancesRespondToSelector:@selector(scale)] ) {
		return NO;
	}
   
	if ([[UIScreen mainScreen] scale] == 2.0) { //Retinaの場合
		return YES;
	} else if ([[UIScreen mainScreen] scale] == 1.0) { //Retinaではない場合
                return NO;
        }

        return NO;
}

という関数を作って場合分けすることにしました。



意外にアクセスがあるエントリーだったので、間違った記事のままにしておくのはあれだと思ったので追記してみました。
(「cocos2d」,「Retina」でググルと2番目か3番目にでてきていたので。)