2013年04月24日

[cocos2d]iPhone5の解像度に対応

 5月から、iPhone5の解像度に最適化していないアプリはリジェクトされるという話。
Retinaディスプレイの解像度に対応していればOKだと思ってたけど、どうやらアスペクト比も対応しないといけないらしい。

 という事で、対応する事に。

 Xcodeでアスペクト比をiPhone5に対応するには、640×1136pxのスプラッシュ画像を登録すれば、自動的にその解像度でアプリが走るらしい。すげー。
スプラッシュ画像ってのはアプリ起動時のロード画面で表示される画像。
Default-586h@2x.pngの名前で画像をプロジェクトに入れると勝手にスプラッシュ画像として登録される。

 とりあえず、640×1136pxで起動してみた結果。
oldTitle0424.png

oldHighScore0424.png

 まあ、分かってた事だけどこの様にいろいろおかしくなる。
面倒だけど一つ一つ直していく事に。

1.背景画像のサイズ
背景画像のサイズを320×960で用意したので、当然足りない部分が黒帯に。
320×1136に画像を作り直す。

2.ボタンやスプライトの座標修正
cocos2dの座標のY軸は、画面下が0なので、画面下にアンカーを持つイメージで座標を設定してれば問題ないけど、画面上部にアンカーを持たせたい場合、「winSize.height - 50」みたいに設定しないとずれる。


結果。
newTitle0424.png

newHighScore0424.png

 なんとか見れるようになった。
解像度の差分が176px、これが意外とというか、やっぱり結構でかい。
ただの余白的にすると結構違和感があるので、地味に苦労した。
 その辺のバランス調整の中で広告を画面上部から画面下部に変えた。


 最初から1136で作っとけばよかった。
posted by ryo4071 at 00:33| Comment(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2013年04月19日

[cocos2d]広告(NendSDK)導入

 広告を導入しました。
どれにしたらいいのか分からなかったので、AppBankを使う事に。

タイトル画面20130419.PNG
しかし広告を導入するだけでこれほど苦労するとは・・・。


■詰まり1:まず表示の仕方がわからん!
 マニュアルを見ると、UIViewにaddSubviewして表示させてるんだけど、
フレームワークcocos2dでどうすればaddSubview出来るのかわからんくて、詰まった。
いろいろ調べて、現在のCCLayerじゃなくて、CCDirectorに対してaddSubviewすればいいらしい。
[[[CCDirector sharedDirector] openGLView] addSubview:soubiScrollView];
これで出来るらしい。

 ところが、openGLViewで警告が出た。
基本英語でエラー出るからぱっと見でわからんから苦労する。
どうやらcocos2dのバージョンがあがって、削除された(される予定?)仕様らしい。

[[[CCDirector sharedDirector] view] addSubview:self.nadView];
にして、解決。


■詰まり2:消しかたがわからん
 [[CCDirector sharedDirector] view]に対してViewを追加すると、現時点の画面じゃなくてアプリケーション全体に対して影響を与えるので、別シーンに遷移しても広告が出っぱなし。
 ゲーム画面は広告を出さないつもりなので、ゲームシーンに入ったら広告は消したいんだけど、消しかたがマニュアルに書いてない・・・
 「Hidden」とかいうプロパティをみっけたのでYESを入れてみたけど、非表示にならない。
 仕方ないので、View自体をremoveFromSuperviewで[[CCDirector sharedDirector] view]から消すようにしたけど、正しい方法なのかわからない。
まあ今のところちゃんと動いてるし大丈夫かな・・・

■詰まり3:落ちる
 60秒で広告をリロードして更新するんだけど、その時に落ちる。
原因が全然わからんかったので、半ばお手上げ状態だったけど、マニュアルをよく見てみたら気になる事が。
「dealloc 時には、必ず delegate プロパティに nil をセットしてからリリースを行うようにしてください。」
書いてある通りにdeallocを継承して
- (void) dealloc {
    [self.nadView setDelegate:nil]; // delegate に nil をセット
    [self.nadView release];
    self.nadView = nil;
    [super dealloc];
}
こうしたら、ようやく直った。

 やっぱりマニュアルはちゃんと読まなきゃダメだね。
ちなみにreleace処理の前に、[super dealloc]を持ってきても落ちる。
そこでもプチ詰まりした。


 そんな感じで、とりあえず現時点ではちゃんと動くようになった。

 今日は広告表示だけで終わってしまった。
今週の土日こそはちょっと頑張って作ろう。
posted by ryo4071 at 02:13| Comment(1) | 日記 | このブログの読者になる | 更新情報をチェックする

2013年04月18日

[cocos2d]ページのスクロール

ハイスコアの画面。
ランキング画面20130418.PNG

左右にフリックして、LEVEL1 ←→ LEVEL2 ←→ LEVEL3 みたいにスクロールで切り替えたいなーと思って、どう実装するか調べてたら、めっちゃ簡単に出来る方法があった。

cocos2dの拡張ライブラリ、Cocos2d Extensionsなるものをダウンロードして、
その中のCCScrollLayerってやつをプロジェクトに放り込む。


で、使いたいクラスでCCScrollLayer.hをインポートして、
        // ページレイヤーを配列で作成
        NSMutableArray *layerArray = [NSMutableArray array];
        [layerArray addObject:[self viewHighScoreLavel:1]];
        [layerArray addObject:[self viewHighScoreLavel:2]];
        [layerArray addObject:[self viewHighScoreLavel:3]];
        CCScrollLayer *scroller = [[CCScrollLayer alloc] initWithLayers:layerArray widthOffset: 0];
        
        // インジケータ非表示
        scroller.showPagesIndicator = NO;
        
        // レイヤーを表示
        [self addChild:scroller];
これだけでできた。
[self viewHighScoreLavel:1]のメソッドでレイヤーを作成して、戻り値として返してます。 CCScrollLayerの中に、各ページのレイヤーを配列で全部入れると、勝手に上手いことやってくれる。


あと、デフォルトで現在のページ位置を表すインジケーターが表示されるんだけど、
邪魔だったんでshowPagesIndicatorプロパティをNOにしたら消せた。

さすがcocos2d、便利なライブラリがいっぱいあるぜ。
ラベル:cocos2d
posted by ryo4071 at 00:55| Comment(0) | 日記 | このブログの読者になる | 更新情報をチェックする
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。