× [PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。 |
ヘッダファイルがC/C++ファイルから読み込まれたのか、
Obj-Cファイルから読み込まれたのか。 見分けたいときはコレ。
PR |
ハイスコアなどの記録方法。
NSUserDefaults を使う。 記録
取得
参考 |
cocos2d-x 3.1rcで、ARC設定を有効にした。
プロジェクトの設定で Build Settings の Objective-C Automatic Reference Counting を Yes にする ただしこれだとコンパイルに失敗する。 一部のファイルをARC対象から除外する。 その方法は Build phases の Compile Sources から AppController.mm RootViewController.mm main.m の3つを選択し、Compiler Flagに -fno-objc-arc と書く。 これでコンパイルが通る。 ちなみにAppController.mm もARC対象にしたい場合は コンパイルエラーがでる dealloc や release の行を消せば概ね良く、一カ所だけ
という行だけ、キャストに問題があるエラーが出る。ここは
と書き換えればOK。 残り2ファイルも行けるか? http://tf.hateblo.jp/entry/2013/04/06/175000 cocos2d-x 2.0の記事だけど。多少参考になる Cocos2D 2.X プロジェクトをARCに対応させる方法 |
URLスキームを使う
うーむ簡単。 urlの部分(itunes.apple.com以下)は、AppStore上に実在してればどこでもOK。 もう少しいろいろしたい場合の参考。 iPhone端末内にアプリがある場合はアプリを、ない場合はAppStoreを開くコード アプリ内でApp Storeが開ける! SKStoreProductViewControllerについて |
ビューコントローラには二つの初期かメソッドがある。
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil; -(id) initWithCoder:(NSCoder *)aDecoder nibで定義されていれば前者が、 そうでないアーカイブオブジェクトなら後者が呼ばれる。 必ず行いたい初期化処理があれば、共通のメソッドを作っておいて両方から呼ばせる。
参考 |
twitterやfacebookとの連動をする方法について。
Social.framework というのに入っている。このフレームワークはデフォルトで用意されている。 #import <Social/Social.h> で使用できる。 cocos2d-xの場合は、AppController.mmに以下のように書く。
要するに、twitter用のあのダイアログはViewController扱い。 起動時にデフォルトで入れる文章が initialText にあたる。 投稿ボタンやキャンセルボタンを押すとダイアログは閉じ、ViewController も閉じる。 再度投稿させる場合は、再度ViewControllerを作るわけ。 completionHandler にメソッドを登録しておくと、投稿ないしキャンセルしたときにコールバックが飛んでくる。
ただし、投稿に成功・失敗したとは違うことに注意。 「投稿」ボタンを押したが、twitterのパスワードが登録されていなくて投稿に失敗した、のような場合でも、resultは SLComposeViewControllerResultDone のほうが渡されてくる。 |
iPhone各機種の比較。
端末 画面サイズ 初期OS iPhone4S 640x960 5.0 iPhone5 640x1136 6.0 iPhone5c 640x1136 7.0 iPhone5s 640x1136 7.0 作ったアプリの画面サイズが 640x960 で動くか、640x1136 で動くかどうかの判断は、アプリ内に Default-568h@2x.png というファイルがあるかどうかによるらしい。 公式マニュアル ずいぶん分かりにくい。注意しよう。 |
レーティングしてもらうために出すダイアログ。
定番は iRate。 分かりやすい説明の記事。 iRate.h iRate.mm の2ファイルを置くだけで良い。 設定内容として以下のようなコードを起動直後に行っておく。
とある画面を一定回数通ったらダイアログを出す、をしたいときは
というのを呼べばいい。設定した内容に応じて、ダイアログを出してくれる。 ただしこれも、開発中(APP_IDが存在しない)ときはダイアログが出ないので注意。(後述) 自分で明示的に呼び出すこともできて、
とすれば良い。必ずダイアログが出る。 また、レーティング済みかどうかは
で分かる。 ただしこれは実際にApp Storeに書き込んだかどうかではなく、アプリ内で保存している変数値でチェックしていることに注意。
さて、コンパイルに失敗する場合があるが、それはARCが有効になっていないからかも。 このページを参考にして対応しよう。 問題はAPP_ID。アプリを申請したときに出てくる固有のID。これはサブミット作業を進めておかないと取得されない。 実際には、APP_IDでなく、バンドルIDでもレビュー画面に飛べる。 だからAPP_IDがなくてもいいんだけど、ぶっつけ本番になるから確認したいところ。 多分、サブミット作業をバイナリアップロード前(情報登録)のところまで進めておけば、APP_IDが発行されるんで、それを入れておくところまでやっておこう。 APP_IDまで入れた状態で、しかしまだAppStoreにページが存在していない状態(URLは決定しているけどね)で、 [[iRate sharedInstance] logEvent:NO]; を呼び出すと、ログに以下の文章が出る。
つまり、ダイアログは表示されなかったけど、AppStoreにページがないだけだから安心して、ということだ。 提出前のチェックとしては、このメッセージを信じて実装完了としよう。 |
フレームワークを入れるまではマニュアル通りでOK。
コードを書く段になるとややこしい。 cocos2d-xなのでビューコントローラがテンプレートと違っているとか、コードがC++で書かれているからObj-C側が呼び出しにくいとかそういう問題を解決していく必要がある。 この辺、appCCloudだとcocos2d版SDKも用意されていてとても開発者フレンドリーなのだが、見込める広告収入はアイモバイルのほうが高いとのことなので、そもそも何のためにゲーム作ってるのかと考えると頑張ってアイモバイルを入れることに意味がある。 バナー広告 まずバナー広告を入れる。 バナー広告はViewとして用意されている。(IMobileAdView) なので、いずれかのビューに addSubview する形を取る。 cocos2d-xの場合、RootViewController が用意されていて、このビューコントローラについているビューは CCEAGLView である。設定箇所は AppController.mm になる。 つまりこのCCEAGLViewに addSubview することになる。 なので、そのままAppController.mmの - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions メソッド内で addSubview しちゃえばよい。マニュアルに書いてあるコードをほぼそのまま使えるぞ。 あとは…分かるな? もうこれで表示されるぞ! ちゃんとアイモバイルのほうで設定はしてあるな?シミュレータ上では表示されないぞ! アイコン広告 アイコン広告を入れる。 仕組みはバナー広告と同じ。Viewとして提供されているので、適切なビューに addSubview するだけ。生成時の引数の形が少し違うだけ。(並べるアイコンの数の指定があったりする) やることはバナーと同じだ! マニュアルによると、1画面に出せる広告は1種類だけ、と書いてあるけど、別にそんなこともなくバナーとアイコン同時に出せる。 ミディアムレクタングル広告 なぜか別のSDKとして提供されている。(一緒にしろよ なぜかこっちはパブリッシャーIDとかが文字列指定になってる。(揃えろよ 表示するとき、ビューコントローラを指定する方法と、ビューを指定する方法とがある。どっちでも好きな方を使おう
ちなみにこちらには、広告取得が完了したときに呼び出すdelegateが指定できる。 クラスにIMobileSdkAdsDelegate を継承させて [ImobileSdkAds setSpotDelegate:@"spotid" delegate:self]; としておくと、 - (void)imobileSdkAdsSpot:(NSString *)spotid didReadyWithValue:(ImobileSdkAdsReadyResult)value というメソッドが呼び出される。 これ以降、表示メソッドを呼び出すと広告が出る。(この前に表示メソッド呼んでも何も起きないので注意) (バナーとかアイコン広告は準備でき次第表示されるので、先にビューを作っておいても構わない。ミディアムレクタングルとかのインライン系はそうでないので、必ず広告取得完了したかの確認をすること) ちなみに、Web上で広告スポットの登録をしてから実際に使えるようになるまで何時間もかかるので注意。 この間、広告はでないしエラーも出ない。(お粗末! 「安心しろ!君のプログラムは間違ってなんかいない!」 雑感 とりあえず、SDKは相当お粗末。(この点appCCloudは優秀だった) バナー・アイコン版とインタースティシャル版でSDKが別になってるし、 インタースティシャル版のサンプルプロジェクトで広告表示されないし(何のサンプル?) 中のコードも大概な感じ。
書いた人プログラミング素人なの? |