2011年9月30日金曜日

UIWindow.rootViewController

iPhoneアプリにGame Centerを組み込む時は、cocos2dで作る iPhone&iPadゲームプログラミングに掲載されている、GameKitHelperクラスが便利です。

長いドキュメントを読むよりも、実際のコードの方が GameKit フレームワークの理解を深めるのに役立ってくれます。まあ、でもドキュメントも読みましょう(笑)

この GameKitHelperクラスは、GameKitの用意したViewを表示させるために、UIWindowの rootViewController プロパティにアクセスします。
なのでAppDelegateのapplicationDidFinishLaunchingメソッドなどから、
window.rootViewController = viewController;
[window makeKeyAndVisible];
として、UIViewController を代入しておく必要があります。
と、ここまでは書籍に載っていました。

アプリを iOS3 にも対応させるため、GameKit フレームワークを Required から Weak に変更している事も多いと思います。
GameKitHelperクラスは、その辺りのこともちゃんと処理してくれます。
しかし、UIWindow の rootViewControllerプロパティは 、iOS4以上から使用可能なので、上記の単純な代入コードでは問題が起こりますので注意して下さい。

実際には以下のような感じで場合分けしておくと良いでしょう。
GameKitHelper *gkHelper = [GameKitHelper sharedGameKitHelper];
gkHelper.delegate = self;
if (gkHelper.isGameCenterAvailable) {
	// window.rootViewControllerはiOS4.0以上でないとアクセス出来ないので注意!
	window.rootViewController = viewController;
}

2011年9月27日火曜日

iPhone/iPad touch用お絵かきアプリ「はっぱ」


本日、リリースしました。

描いた絵の上に、葉っぱが舞い落ちるお絵かきアプリです。

お絵かきした線の上に、舞い落ちる葉っぱが積もり、キャンバスをカラフルに飾ってくれます。葉っぱの他に、雨つぶや、てんとう虫も登場します。

「なんとなく絵を描いてみたけど、自分でも思ってもみなかった絵になった」という楽しさを考えて、このアプリを作りました。
お子様はもちろん、大人の皆様もぜひお絵かきを楽しんでみて下さい。

  • アプリ名:はっぱ (海外名称:Leaves Paint)
  • 価格:無料

サポートURL:http://www.hash.rojo.jp/garbage/iphone/leavespaint/jp/

プレス用素材:https://picasaweb.google.com/hamken1/LeavesPaint


2011年9月25日日曜日

cocos2d(0.99.5)のunscheduleUpdate

cocos2d (0.99.5)の、[CCLayer unscheduleUpdate] で、場合によってBAD ACCESSでクラッシュする症状にハマリました。

メモリリークしている形跡もないので、nonatomicな変数に違うスレッドからアクセスしてるのかと思ったけど、そうでもなかったようで、もうどうしようかと思っていたら、こんな情報にたどり着きました。

Bad access when unscheduling selector in a function which is called by an CCCallFunc action

要は、早く最新の 1.0.1 にアップデートしとけば良かったということになります。(汗)
入れ替えたら、何事も無く、動くようになりました。

cocos2dで作る iPhone&iPadゲームプログラミングが、0.99.5をベースに書かれていたので、cocos2d に慣れるまでは 0.99.5 にしとこうと思ったのが間違いだったようです。
今更なネタですが、もしまだ古いバージョンをご使用中なら、早めにアップデートしとくのが良いです。

2011年9月21日水曜日

「はっぱ」の遊び方 応用編

「はっぱ」の遊び方、応用編です。
「はっぱ」は iPhone/iPod touch用の、描いた絵の上に葉っぱが舞い落ちる、お絵かきアプリです。

「はっぱ」で描いた絵を、iPhone 用の写真加工アプリで色々いじくって遊んでみました。
今回使用したアプリは Photo Effect Studio というアプリです。

「はっぱ」で描いた絵は、こんな感じの金髪美少女(笑)
クチビルの上の赤い葉っぱが絶妙! 偶然ですけど…。

これをフォトアルバムに保存して、Photo Effect Studio で読み直して加工していきます。
最初のパターンはこんな感じになりました。

おっ、なんかいい味だしてますね。大人な感じ?(意味不明)

セピア調に加工すると、こんな感じになりました。


面白い作品が出来上がったら Facebook の Leaves Paint ページに投稿してみよう!

2011年9月13日火曜日

AdMaker SDK 3.3導入の注意点

そんなバカな〜。
僕の使ってた iPhone用 AdMaker SDK のバージョンが3.1だった事が判明しました。

AdMaker にユーザー登録した直後に現れるダウンロードリンクからダウンロードしたのがバージョン3.1だったみたいです。なんというトラップ!
3.3をダウンロードし直したら、結構、実装が変わってるし(笑)

約1日かけて、組み込み直しました。
結構ハマったので、注意点を列記してみます。
  • AdMaker SDK導入ガイドの内容は疑ってかかるべし。
  • didLoadAdMakerViewは、広告の取得に成功した際に呼ばれると書いてあるけど、最初の1回だけしか呼ばれない。再度、広告を読みなおしても呼ばれない。
  • willAppearAdMakerScreenは、広告のページが表示された際に呼ばれると書いてあるけど、一度も呼ばれたことがない。
  • willDismissAdMakerScreenは、広告のページが非表示になった際に呼ばれると書いてあるけど、これも一度も呼ばれたことがない。
  • サンプルでは viewDidLoadで、AdMakerViewをインスタンス化してるけど、viewDidUnload で Release してないのでメモリワーニングがでたらメモリリークする。
  • AdMakerViewクラスは、UIViewのサブクラスじゃなくて、UIViewControllerのサブクラス
  • 広告によってはタップすると App Storeアプリを起動するものがある。しかし、iOSシミュレータには App Store アプリがないので、Safari アプリでエラーが出てしまう。
  • 広告によっては外部アプリが起動するということは、自アプリがバックグラウンドに回されるということ。AppDelegate の applicationWillResignActive で AdMakerViewのインスタンスを解放しちゃいけないようだ。自アプリに復帰した時にとんでもない事になる可能性がある。(cocos2dの場合、EAGLViewの再構築が失敗する)
  • App Store アプリを起動しない広告の場合は、AdMakerView(UIViewController)下のUIWebViewで広告が表示される。その際、アプリメインビューのUIViewControllerの viewWillDisappear が呼ばれるので、ゲームなどのアプリの場合、ここで Pause 処理を記述して、viewWillAppear で Resume 処理を記述しとかないと裏で動きっぱなしになる。アプリによっては、不都合が出やすい所に Pause 処理を入れなきゃならないので憂鬱かも。
  • AdMakerView クラスの viewWillAppear メソッドを呼ぶと、広告のリロードができるけど、これってオフィシャル的にOK?

どなたかが、AdMaker SDK は複雑だと書いてました。その時は「ええ〜?」と思いましたが、今回組み込んでみて、その意味を味わいました。(笑)

勘違い等ありましたら、ご指摘して頂けると助かります。


2011年9月10日土曜日

はっぱ、アドオン購入処理

iPhone用お絵かきアプリ「はっぱ」の、アドオン購入処理を作成しました。
Dr. Mandala で経験済みなので、簡単だろうと思っていたら、意外に手こずった。

アドオン購入用のインターフェースを一から作成するのは面倒です。
なので、UIAleartView を使ってメッセージとボタンを表示させるようにしました。
ここまでは良かったのだけど、アドオン購入処理中に、こちらが表示させる UIAleartView と StoreKit.framework 側が表示させる UIAleartViewが混在して、StoreKit 側が表示させる UIAleartView が律儀に AppDelegate の applicationWillResignActive と applicationDidBecomeActive を呼ぶようになっていたので、そこに仕込んでおいた処理を場合分けしなければなりませんでした。

UIKit はメソッドにログを表示させとかないと、何が起きてるのか分からないことが多いですね。

はっぱ、もうすぐ完成

iPhone用、葉っぱお絵かきアプリの名称を正式に「はっぱ」としました。
機能は95%組み込み終わって、あとはアドオン購入処理を残すのみとなりました。
この辺りは、Dr. Mandala の時に経験済みなので、まず大丈夫でしょう。

アドオンを購入すると、広告を非表示にすることができます。
特に気にならない方は、無料でお使いできます。
ただ、明日のアプリ開発のために、気に入ってくれたら購入してくれると嬉しいです〜(*^^*)


2011年9月8日木曜日

lipoコマンドでarmとi386のライブラリを統合

前のポスト「AdMakerを入れてみた」で、シミュレータービルドとデバイスビルドで組み込むライブラリを変更する方法が知りたいと書きましたが、方法がありました!

simulatorとdeviceのライブラリを統合する

lipoコマンドでダイエット

lipoコマンドというのがあって、これを使えば、arm6,7用、i386用のスタティックライブラリを1つのライブラリファイルにまとめることができるそうです。

AdMaker のスタティックライブラリの場合

libAdMaker_sim.a ---- i386用
libAdMaker_dev.a ---- arm6,7用

となっているので、これをまとめるには…
> lipo -create ./libAdMaker_sim.a ./libAdMaker_dev.a -output ./libAdMaker.a
としてやり、1つのファイルにまとめた libAdMaker.a を自分のプロジェクトに組み込めば、邪魔な警告が出なくなります。

しかし、これってどういう仕組みなのでしょう?
ビルドする際に必要ない方をきちんと削除してくれるのか、それとも両方共実行バイナリに含まれてしまうのか気になるところです。

AdMakerを入れてみた

今開発中の葉っぱお絵かきアプリに、AdMakerを組み込んでみました。


当初は、AdMaker と iAd の 2広告体制(切り替え)で行くつもりでしたが、iAd のドキュメントを読んでいたら結構面倒そうだったので、ちょっと様子見…。
AdMaker の方は、すんなり組み込めましたが、逆にドキュメントがあっさりし過ぎてて、組み込むアプリによっては試行錯誤するかもしれないです。cocos2d(0.99.5)との親和性も申し分ないです。

ところで、iPhone用 AdMaker SDK(3.3) には、デバイスビルド用とシミュレータビルド用のライブラリ libAdMaker_dev.a と libAdMaker_sim.a の2つが同梱されていて、両方共プロジェクトに追加するようになっています。
_devの方が arm6 でビルドされていて、_simの方が i386 でビルドされているみたいです。

この状態でデバイスビルドを行うと、_simの方が読み込めないライブラリだよと、Xcodeから警告されてしまいます。
シミュレータビルドの方は逆で、_devが読み込めないライブラリだと警告されます。

常にもう片側が補完するので、アプリの動作には影響ないのですが、ビルド警告が必ず1個残ってしまうのが気持ち悪い。ビルド構成をシミュレータビルド用に1つ増やすというのは、ちょっと管理が面倒なんで、もっと簡単にデバイスビルドとシミュレータビルドで、組み込むライブラリを変える方法があったら教えてほしいです。-> (ありました!)

2011年9月6日火曜日

葉っぱお絵かきアプリ

ただいま、お絵かきアプリを開発中です。
葉っぱたちが上から降ってきて、描いたらくがきの上にそっと乗っかります。
だいたいこんな感じになります。


cocos2d(0.99.5) で CCSprite の描画先をテクスチャーに切り替えるのが容易だったので、ゲーム以外のお絵かき系アプリでも cocos2d で開発していこうと思っています。
このアプリ、もともとは Flash で作ってあったんですが、ここまでの移植は驚くほど楽でした。スプライトの作成は、TexturePacker を使用しています。


2011年9月4日日曜日

Dr. Mandala バージョン 2.0



Dr. Mandala バージョン 2.0 がリリースされました。
変更内容は以下のとおりです。

  • 無料体験時間を10分に延長
  • ビジュアルを変更
  • ユーザーインターフェースを変更
  • アイコンを変更
  • サウンドエフェクトを変更
ビジュアルに関しては、もっときれいにしていきたいと思っていますので、どうぞお付き合いのほどよろしくお願いします。



2011年9月2日金曜日

ネコグラス時計 バージョン1.1



ネコグラス時計 バージョン1.1がリリースされました。
更新内容は以下のようになっております。
  • マルチタッチ対応
  • 設定画面のスライドボタンの操作性向上



Related Posts Plugin for WordPress, Blogger...