× [PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。 |
RenderTexture のインスタンスを作る
texture->begin(); node->visit(); texture->end(); RenderTextureは、「ノード」を描画する。「画面」を描画するわけではない。 描画したい「ノード」(以降、ターゲットノードと呼ぶ)を、通常のdrawと同様に行うだけ。 だから、ターゲットノードに、setPosition()が入っていると、その分描画がずれてしまう。 これをRenderTextureのメソッドで修正するのは、ちょっと考え方が違うし、やりにくい (setVirtualViewport()で変更できるが。後述) 簡単な対処として、 描画前にターゲットノードにsetPosition(0,0)を行い、 描画が終わってから元の座標を再代入することが考えられる…(A) 少しスマートな方法として、ターゲットノードは、その上にダミーノードを作り、 ダミーノードにsetPosition()をしておき、描画したいノードそのものにはsetPosition()しないのが良いと思われる…(B) が、このやり方でも問題が。 renderするとなぜか、ノードが画面(親ノードではない)の左下隅に移動してしまうという問題が起きた 原因は詳しく追っていないが、 想像できるのは OpenGLのビューポート指定が(0,0,w,h)の形であり、 これだと画面の左下を切り取って描画する形になっている。 それに合わせるため、ノードを画面左下に配置して描画しているということだろうか 実際、上記の(A)の時は、この問題が起きていない。描画後にsetPosition()をしているからだろうか。 結局、 「ターゲットノードと同じものをもう一度作り、それを描画する」 という形に落ち着いた。一番無駄な形に… RenderTexture.cpp
PR |
なぜか広告がいつまでも取得されない(AdsFetchCompletedがいつまでも呼び出されない)という現象。
どうやらライブラリの追加もれがあったようだ。 コンパイルエラーとかリンクエラーとか起きないこともあるのか。 沈黙の臓器。 全部直したらちゃんと取得された。 次の問題。 maioが再生できない。 エラーとして以下のようなものが出た UIAlertControllerに動画ビューを載せようとしているようだ。 なぜそんなことをするのか。 確かに、再生命令の直前までアラートを出している(アラートで「はい」を選択したら動画を再生している) それのせいなのか。 その時点で最前面にあるコントローラに載せて再生しようとしているのか。 アラートから直接でなく、アラートの直後(0コンマ数秒後)に再生するように変えてみた。 まだダメだ。同じワーニングが出る。 まだUIAlertControllerのインスタンスが残っているからか。 アラートを出さずに再生してみた。 問題なく再生された。 うーむ。再生するビューコントローラを指定できないのか? adfurikun自体のメソッド(ADFMovieReward.framework)には、再生するときにビューコントローラを指定する方法がない。 しかしmaioにはあったはずだ。以下の2種類の指定ができる。 [Maio show]; [Maio showWithViewController:viewController]; そこで、adfurikunからmaioを呼び出す部分を見てみる。 MovieReward6004.h/m だ。 見てみると、確かに
とだけ書いて有る。 そんなら、こっちから指定できるようにしちゃおう、ということで MovieReward6004.h
MovieReward6004.m
という感じで追記してみた。 で、adfurikunの初期化のときに
を追加。 ビルドして実行してみると…いい感じ! アラートがあってもちゃんと再生された! というわけで、maioは解決。 だが…ほかの広告も対応が必要になってくると面倒。 vungleで試したが、こちらは指定がviewやviewControllerでなく、windowになっている。 同じ要領で [UIApplication shareApplication].keyWindow を渡そうとしたが、なぜか実行時に盛大に落ちる。 面倒になってきたので、 「アラートと一緒にadfurikunは再生しない」 というのが現状の結論。 ####################### 別件。 アドフリ君には、以下の2つのdelegateが用意されている(他にもあるが) AdsDidCompleteShow AdsDidHide 動画の再生が終了した時と、動画を閉じた時だ。 動画広告は通常、動画が流れ終わると静止画になって、ダウンロードページに行くか、広告を閉じるボタンかを選ぶ。 静止画になった時に呼ばれるのがAdsDidCompleteShow、広告を閉じたらAdsDidHideが呼ばれるべきだ。 だが、必ずしもそうなってない。 検証した。
ということだ。 appLovinとmaio優秀。 adColonyとvungleトラップ。 元のSDKに対応するコールバックがないのかもしれないが、通知タイミングが名前と違うのは罠だ。 本来、インセンティブを付与するのはAdsDidCompleteShow ゲームを再開する処理はAdsDidHide と別々になっているべきだ。 adColonyとvungleなんかは、コールバックの名前を信じて実装してると、 広告を閉じないとインセンティブがもらえなくなる。 これがどういう問題かというと、 広告を見て、ユーザがその広告先に遷移し、そのままゲームアプリがメモリから消えてしまうと、広告を見たのにインセンティブがもらえない、ということが起きてしまう。 これはクレームがついても仕方がない。 対応したほうが良いだろう。 方法として考えられるのは ・その広告を使わない ・広告再生中にアプリがバックグラウンドに行ったら、付与する ・再生開始時にもうインセンティブ付与しちゃう ・ストック型のインセンティブにしない(本末転倒) などなど… |
||||||||||||||||||
読み込み処理をしている場所 どうも同期的に読んでいるように見える CDAudioManager.m audioSourcePlayer = [(AVAudioPlayer*)[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:&error]; |
cocos2dのセーブには2種類ある
Dictionary UserDefaults このうち、Dictionary はすでに deprecated になっているので、 UserDefaults を使うことになるのだが こちらはセーブに時間がかかる 300変数をセーブすると4秒とかかかったりする ただしこれはセーブのタイミングによっても変わるし、 なんどもセーブしていると段々早くなる。 使うときはよく考えて行うべし |
以前admobから告知があった(そして本社に行った)、
アプリ内課金と広告をユーザに応じて出しわける例の技術。 名前は「アプリ内課金向け広告」というらしいが。 公式 現時点でまだベータ版なのと、 Android版だけのサービスなので(GooglePlayで検索して出てくるアプリにしか使えないと明記されている)、とりあえず実装は見送り |
cocos2dで作ったゲームプロジェクトを
古いシミュレータ対象でビルドすると、以下のようなエラーが出ることがある。 libchipmunk内で、多くのシンボルが多重定義されているというエラー。 おそらく、libchipmunkが2重にビルドされているのだろう。 なぜそういうことが起きるのが、という追求は別にする必要はなく、 libchipmunk自体使っていないので、ビルド対象から外して仕舞えば良い。 その方法は、以下のリンク先にある。 参考 プロジェクトの Build Phases の Target Dependencies から libchipmunk を削除。 また、 Link Binary With Libraries からも削除。 これでこのエラーは起きなくなる。 |
後から思い出しながらなので、抜けがあるかもしれないが。
なお結論としては、直接Macとつないでのデバッグは不可。ログを見たりはできない。 ネットワークからapkをダウンロードして動作確認しかできない。 1. 端末を初期化して、Gmailアカウントを設定。 このアカウントは、テスト用(主に課金テスト)に使う物。 自分の普段使うアカウントではない。 2. 設定アプリ→端末情報→ソフトウェア情報→ビルド番号を連打。これで開発者オプションを有効にする 3. 設定アプリ→PC接続→USB接続方法の選択→充電(気持ち的にはテザリングのような気がするが) 4. http://www.lg.com/jp/support-mobile/lg-D620J からUSBドライバーをインストール。再起動 5. USBケーブルで繋いだら、あとは出来る はずだったのだが、ドライバーがMac OS 10.11 (El Capitan)に対応していない! そのため $ adb devices で表示されない… $ adb install XXX.apk ももちろんできない… ○繋いでいるはずのandroid端末がadbから見えない時の対処 ここからは、以下のページを見てやってみる 参考ページ まずは端末をmacに繋ぐ 左上のリンゴ→このMacについて→システムレポートをクリック USBの項目を見る ここの、製造元ID(Vendor ID)をチェック。 この16進数を、以下のファイルに書き込む $ echo 0x1001 >> ~/.android/adb_usb.ini これで、adbを再起動し、再度チェック $ adb kill-server $ adb devices これで出る! はずだが、やはり出なかった ドライバーが古いせいなのか… |
BITCODEで以下のエラーが出た場合
以下のように設定する |
画面サイズは以下のように設定。
MainCameraでOrthogontal サイズを5.68にする。 これは、640x1136の想定。 サイズは568じゃないのかと思うところだが、 と、ここで設定している。 Unityの1メートルが100ピクセルになる寸法。 これ、1にしたほうがいいんじゃないかという気がする 表示位置の計算をするときに、毎回100分の1にするとか面倒だ |
|