カスタム検索

2011年3月28日月曜日

FlexでiOSアプリを作ってみた。

AdobeAIR2.6も公開され、AIR for iOSも公式に実装される形になりました。
というわけでFlexでiOSアプリを作ってみます。
なぜFlexかというと、Flashはタイムラインの概念がどうにもわかりにくく扱いきれてないので・・・

必須なものはAIR2.6SDKとiOSのデベロッパー登録のみです。
コレを参考に。
FlashBuilderなんかがあるとビルド設定あたりは勝手にやってくれるので楽です。
FlashBuilderに最新版のSDKをいれ、新規アプリケーションを作成します。

はじめはWindowedApplicationが親になっているので、こいつをApplicationに変更。
BorderContainerにLabelいれただけでのHelloWorld作ります。

FlashBuilderであれば自動的に「プロジェクト名-app.xml」ファイルが出来ているので、これの中身を編集。
とりあえずiPhoneの部分を活かし、supportedProfilesをmobileDeviceに。
FlashBuilderが勝手にコンパイルしてくれるので、出来たswfとxmlを使ってadtでipaファイルにコンパイル。
ipaファイルができたらiTunesのAppに放りこんで実機と同期。

サクっとiOSアプリが完成しました。
特にFlexアプリケーションでも問題なく動くようです。
これを登録するときはApplicationLoaderを使うのかな?

アプリの方は若干起動が重い感じがしますが・・・。Flexベースなせいでしょうね、きっと。
Flashちゃんとやらないとなぁ・・・ああめんどくさい><
cocos2d for Flashとかあればいいのに!

でもこれでWin,Mac,Android,iOSとワンソースでいけるのはなかなか魅力的ですね!
あとはAirのランタイムが初回起動時にネット接続必須なのがなんとかなってくれるといいんだけどなぁ

2011年3月23日水曜日

xcode4+cocos2dでiPhoneアプリを申請してみた

新MBPに乗り換え、xcode4+iOS4.3も正式リリースになったという事で移行した際にはまった事など。

・missing fileが出まくる
svnを使用していて、svn deleteせずにファイルだけ消えている状態になると出るっぽい。
ビルドには問題ないけどwarningが出まくってるのは気分的によろしくない。
該当ファイルをsvn deleteしてプロジェクトを開きなしたら治った。

・iOS4.3 simulatorでエラーが出る
ココとかココによると皆なってるっぽい。
実機の4.3では問題なく動作するので気にしない事にする。
xcode4 templateで改善したのかもしれない。

・Distribution
xcode4ではアプリケーションローダーが不要になり、xcode4内で完結出来るようになっている。
アップの仕方はココらへんを参考に。
cocos2dの旧プロジェクトをそのまま移行した場合、そのままではvalidateでエラーが出る。
メインプロジェクトとcocos2dのターゲット両方がインストールされる指定になっているので、プロジェクトツリーからプロジェクトを選択>TARGETSのcocos2d librariesを選択>Skil InstallをYESにする事で回避。

cocos2d xcode4 templateでは修正されてるのかな?

ついでにcocos2d 0.99.5であったBUG FIXを適応してアップ。
このバグ確認出来なかったけど、これでアプリケーションクラッシュが改善されるといいなぁ

・新MBP
なんかSSDが早く感じる。VAIOのSSD*4 RAIDと比べても遅いとか思わない。
プロジェクト内の文字列検索とかいつ検索したの?ってぐらい早い。
ビルドも早いんだけど、その分実機への転送が遅く感じる、特に3G世代(´・ω・`)

2010年9月14日火曜日

iOS4.1の目玉(?)GameCenterを使ってみた・その1

iOS4.1がリリースされ、GameCenterが正式に稼働となりました。

あんまり期待してなかったのですが、なんだかドキュメントを読んでいたら意外におもしろそうな感じ。
単純なスコアランキングから、条件達成、自動対戦マッチにフレンド機能と、自前サーバいらずな感じになりそう。
(どうせならアイテム課金の管理もAppleでやってくれたら完璧なのに・・・)

ちょうどスコア系のゲームをつくっていたので慣れない英語を必死に読みながら実装してみた。

・iTunesConnectにアプリケーションを登録する
登録必須です、スクリーンショットとか検索キーワードとか先に入れるの面倒ですが、後から変更出来ますのでとりあえず作っちゃいましょう。
登録したら、Manage GameCenterから、GameCenter Testingを有効にする。
Leaderboard(ハイスコア)とAchievements(条件達成)がセットアップ出来るので設定しておく。

・プロジェクトの設定
対象のプロジェクトにGameKitをLinkする。
GameKit/GameKit.h をインポートする。
ビルトプロパティの識別子をアプリケーションで設定したものと同じにする。(jp.co.hoge.application)

・稼働しているデバイスがGameCenterに対応しているか調べる
サンプルコードの isGameCenterAvailable に該当

・ユーザを認証する
サンプルコードの authenticateLocalPlayer に該当
ゲーム中にバックグラウンドでログアウトしたりする可能性があるので、GameCenterでの処理を行う前には必ず行う。

・スコアの登録
サンプルコードの reportScore に該当

・ランキングの表示
一般的なGameCenter用の表示と、カスタムでスコアだけ取得して自分で描画するパターンがある。
統合されたインターフェースで十分だったので、一般的な表示を使おうと思ったんだけど、cocos2dだとここがちょっと面倒に。
GKLeaderboardViewControllerDelegate を持つ UIViewController クラスを作成して、CCDIrector の openGLView に addSubview して解決。(超適当)
詳しくはココらへんを参照


とりあえずこんだけでランキングに登録、表示が可能になりました。
フレンドとかはGameCenter側で出来る話なので気にすることもなし。
オンラインマッチに関してはエイバースの中の人が詳しく紹介されてます。

あれ、その1で完結しちゃった。
Achievements触ってみてなんかあれば続きでも・・・

2010年8月31日火曜日

Flexで丸画像とか

Flexで四角以外のアイテムを生成するときのお話
忘れそうなのでメモメモ

丸画像に対してイベントを取得したい時など、Imageを使うと四角の領域でイベントが取得されます。
コンポーネントに対して mask 処理をしてやることで、任意の領域のみイベントの対象とする事が出来ます。

詳細はコチラ
Imageを拡張したクラスを用意して、 cornerRadius プロパティを追加。
描画更新時(updateDisplayList)に、cornerRadius の値からマスクを作成してセット。

2010年8月26日木曜日

cocos2dで日本語をCCBitmapFontAtlasで使うには

ちょっとはまったんでメモメモ

cocos2dでは文字の表示に CCLabel という簡単なものがあるのですが、これが結構な重い処理となります。
スムーズな動作を必要とするゲームなどでは、BitmapFontを使うと良いです。
(逆にADV系など速度を要求しないものであればCCLabelでおk)

現時点(cocos2d v0.99.4)では標準のままでは使えません。
公式フォーラムのコチラで問題点が指摘されています。

プロジェクト内の cocos2d Sources > cocos2d > CCBitmapFontAtlas.h を編集します。

kCCBitmapFontAtlasMaxChars = 2048

kCCBitmapFontAtlasMaxChars = 65536
に変更

BitmapFontを作る方法ですが、Hiero Font EditorというのとBMFontGeneratorというが推奨されているようです。

BMFontはWindowsでしか動かないので、とりあえずhieroを使ってみたんですが、どうもうちではうまく動作してくれませんでした。
(出力画像が天地左右反転されたり、出力対象がコピペできなかったり、一度出力すると変更して二度目の出力が出来なかったり)

なのでBMFontを使ったやり方を紹介します。

・必要な文字を含んだテキストファイルを作成(UTF-16で保存)
・Edit -> Select chars from file で上記ファイルを選択
・Export OptionsでBit depth を 32、png 出力
・Font Settingsで Font smoothing を選択

色などはお好みで、cocos2d側でも変更が効くので特に気にする必要もないと思います。
これで出力された .fnt ファイルを CCBitmapFontAtlas で読み込んでやればBitmapFontで描画されます。

2010年8月4日水曜日

今そこにあるpaypal

paypalが日本での本格展開を始めると言う事で、早速使ってみた。

使い始めるまでの準備をザックリと。

1.Paypalにサインアップする。
本番用と練習用(sandbox)では、別々にアカウントをセットアップする必要があるので注意。

2.sandbox内で使えるアカウントを作成する。
テンプレで作成出来るが、日本語アカウントはマニュアルで作るしかない。
ビジネスでセットアップすれば架空のカード番号が入力されるので、そのままセットアップする。

3.APIのアカウントを取得する
個人設定>APIアクセス>オプション2のAPI証明書を取得する

4.エクスプレスチェックアウトを有効にする
上と同じ所から有効にできる。
レガシーなウェブペイメントorメール決済を使う場合は必要ない、けどエクスプレスチェックアウトを推奨


上記に加え、本番アカウントならカード認証やら口座設定やらをしておく。

新しくはじめるなら、paypalのAPIに対応したカートを使うのが一番簡単。
APIのアカウントを設定するだけでいけるはず。

それではおもしろくない(?)ので、一からAPIをつついてみた。
APIではSOAPとNVP(Name-Value-PairただのPOST通信)が使えるらしいので、もっとも汎用的っぽいNVPをチョイス。

APIのURLや詳細はまずそうなので伏せるとして、流れは以下の通り。

1.SetExpressCheckout
今から支払いスルヨー!とpaypalに宣言する。
オプションでアカウント不要とか、画面表示を変えたりとか出来る。
APIコールに問題なければTOKENが返ってくるので、ユーザ向けページへTOKENを付けてリダイレクトする。

2.GetExpressCheckoutDetails
指定した戻り先のページに戻ってきたら、このAPIを実行。
ユーザがpaypalのページで入力した情報を取得する。(住所とか。クレジットカード番号は取得不可。)

3.DoExpressCheckoutPayment
決済処理の確定。

だんだんめんどくさくなってきたのでこの辺で終了。
paypalの利点は、他社に比べて圧倒的に安い事と、始めやすい(オンラインだけですぐ始められる)事でしょうか。
欠点としては日本での認知度の低さや、わかりにくさ(決済ページが英語表示、ユーザが日本語表示に切り替える必要がある)でしょうか。

2010年6月24日木曜日

iOS3のプロジェクトをiOS4に対応してみる

iOS4が正式に公開されたので、プロジェクトをアップデートしてみるテスト

iPhoneDevよりxcode 3.2.3 finalをインストール
古いxcodeやiPhone simulatorが立ち上がってたら落としておくこと。インストールに失敗する事があるので落としておく。
iTunesも途中で落とせと言われるので先に落としておくのが吉。

とりあえずそのまま以前のプロジェクトを実行してみる>エラー>あるある

UIView.h等で以下のようなエラーが多発
syntax error before '^' token

なぞい、コンパイラをGCC4.2からLLVM GCC4.2に変更すると回避出来るけど・・・
再度ビルド>エラー>ですよねー

今度はSBJSONでエラーが出てる
とりあえず最新版を落としてドキュメントを読んでみると、インストール方法が変わったらしい

追加SDKとリンカグラグをはずして、最新のオススメインストール方法(クラスコピーするだけ)に戻したらさっくり動いた
コンパイラの設定をGCC4.2に戻しても問題なし、と。なんだよ、ちょっと焦っちゃったヨ。

なんでJSON-Frameworkとか使ってないプロジェクトはそのままでいけると思う。
cocos2d(v0.99.3)に関しては今の所問題無し。

お次は実機に・・・と思ったらプロビジョニングされた実機がつながってないよ、と
どうやら実機をiOS4にアップデートしたら別物として認識されているっぽい
xcodeのオーガナイザからIdentifierをコピーして・・・と思ったら「デバイスを開発で使う」みたいなボタンが出ていたので押してみる。
iTunesConnectのIDをきかれ、xcodeからデバイスの登録が完了!
xcode上でiTunesConnectと連携出来るのね、これはイイ改良

HPから確認してみるとTeam Provisioning Profile: *というのが追加されていた
とりあえずこの状態で実機の動作確認もOK

シミュレータで注意しないといけないのが、HOMEボタンで終了ではなくなったので、HOMEおしてもタスクは実行中ということ(3G実機では終了されるけどね :p)
ここで新しいイベント(applicationDidEnterBackground)が飛ぶので、必要ならば処理を追加する。
コチラに日本語で詳しい内容がアップされています。
どうやらapplicationWillTerminateが呼ばれずに終わる事もあるそうで・・・?(本体ないし未確認)
終了処理はちょっと気を付けた方が良さそうです。

当面はiPhoneシミュレータを見ながらiPhone4が手元に届くのを待っています・・・