読者です 読者をやめる 読者になる 読者になる

夏までにiPhone アプリつくってみっか!

趣味でiPhone/Androidアプリを開発し、日々勉強した事を書いています。オープンワールド系レースゲームをUnityで開発中です。

【cocos2d】オリエンテーションをランドスケープからポートレイトに変えてみた

Xcode iOSシミュレーター cocos2d

cocos2dのテンプレートから作成したプロジェクトのオリエンテーションランドスケープモードのみに設定されています。オリエンテーションとは画面の向きの事で、iPhoneを縦に持つか横に持つかで変わります。ランドスケープは横持ち、ポートレイトは縦持ちの意味です。
今作っている縦スクロールシューティングゲームでは画面を縦長に使える方が具合が良いのでポートレイトモード固定にしたいと思います。

cocos2dでオリエンテーションを設定するにはテンプレートに最初から含まれているAppDelegate.mファイルを編集します。オリエンテーションを設定する部分の元の状態はこうなっています。
このメソッドはiPhoneの持ち方を変えるたびにシステム側から呼ばれます。アプリがその持ち方に画面の向きを合わせたい場合はYESを返せばシステムが画面のX軸、Y軸の向きをそのように設定してくれます。NOを返した場合はX軸、Y軸の方向は現状維持となります。UIInterfaceOriatationIsLandScape関数はその名のとおり引数で受け取った画面の向きがランドスケープの時にYES、そうでないときにNOを返します。従って、例えばiPhoneを右持ちから左持ちに持ち替えた場合に画面の向きが修正されます。

// Supported orientations: Landscape. Customize it for your own needs
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
	return UIInterfaceOrientationIsLandscape(interfaceOrientation);
}

ポートレイトモードに変更するのは非常に簡単で、Landscapeとなっている部分をPortraitに変えるだけです。こうすればiPhoneを縦持ちしたときにアプリのX軸、Y軸の向きが正しくなります。

// Supported orientations: Landscape. Customize it for your own needs
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
	return UIInterfaceOrientationIsPortrait(interfaceOrientation);
}

どの向きにでも対応するアプリを作ったときは次のように常にYESを返せばOKです。ただしこの場合は画面の向きに合わせてアプリの表示レイアウトを調整しないと肝心な物の表示が画面外になったりします。

// Supported orientations: Landscape. Customize it for your own needs
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
	return YES;
}

さて、アプリ上の画面の向きを設定したあとはiOSシミュレーターが画面の向きをそれに合わせるように設定してあげます。これをしてあげないと常に横持ちで起動するので毎回画面を回転させる手間がかかります。Xcodeのプロジェクトのターゲットを選択し、Summaryタブをクリックすると次のような画面が表示されます。
f:id:takujidev:20130420161931p:plain
テンプレートプロジェクトの標準状態の場合、画面中央のSupported Interface Orientationsの項目はLandscape LeftとLandscape Rightが選択されています。この状態でiOSシミュレーターを起動すると横画面で始まってしまいます。そこで、次のようにPortraitとUpside Downを選択しておけば縦持ち状態でシミュレーターを起動する事ができます。

f:id:takujidev:20130420161944p:plain

次回はいよいよ画面をスクロールさせて縦スクロールシューティングゲームらしくしてみたいとおもいます。