spritekitでアイフォンアプリ作成、講座みたいにメモ(1)はじめにはじめにiOS向けのSpriteKitでアイフォンアプリを作成しようと思います。メモとして、記録していきます。ゲームアプリ開発講座のようになるとよいのですが。コードの記述が定石でなかったり、王道的でなかったり、無駄、不要なところもあり、適宜修正が必要です。|manifest.xmlの記述ミスでintentでエラーはこちらアイフォンアプリをアンドロイドアプリに移植中です。アイフォンの開発言語はobjective-cで、アンドロイドはJAVA言語になります。JAVAをベースにしてアンドロイドアプリをつくるとしてもアンドロイドアプリのための固有の開発方法がありそうです。details.AndroidManifest.xmlandroid:targetSdkVersion=”18′′しました。動かない,エミュレータを起動してもアプリが実行されないときはEclipseからAndroidエミュレータを起動してもアプリが実行されないこの記事を参考にしてようやくハローワールドが表示されました。com.AAA.bentannote2.MainActivity.onCreateAdmobのライブラリの挿入方法が教科書のヘルプであるグーグルの説明と異なり、変わったようです。正しくは、libs/GoogleAdMobAdsSdk-XXX.jarとなるように、GoogleAdMobAdsSdk-XXX.jarをコピーします。私は手動で、コピペしました。教科書通りにGoogleAdMobAdsSdk-XXX.jarを挿入していたら、挿入済みを一旦削除してください。登録されているGoogleAdMobAdsSdk-XXX.jarがあるとエラーになります。‘com.google.ads.AdView’(5)配列が初期化されていない宣言だけして、初期化を忘れていました。ArrayList();宣言をしたら、どこにでもいいのでまず、初期化を書くように習慣づけたいと思います。アイフォンアプリを作ったのでアンドロイドアプリを作ってみようアンドロイドアプリなんて作ることはないと思ってました。アンドロイドアプリを作成するのに、今度はJAVAを覚えなくてはならないという手間が嫌でした。それに、アンドロイドアプリを作っても果たしてダウンロードをする人がいるのか、作っても無駄な作業にナルト思っていました。自分の作ったアイフォンアプリが比較的よくできたと思ってしまったので、アンドロイドアプリを作ることにしました。それに、自分が使うアプリなら、誰もダウンロードしてくれなくても、自分が使えていればそれで十分なのかもしれません。作り方から勉強します。内容と構成はアイフォンアプリと同じなので必要な機能を覚えて行きます。簡単なアプリからはじめます。アイフォンアプリのx-codeと比較しながらメモをとっていきます。アンドロイドアプリの作り方をすぐに忘れてしまいます。忘れても良いように書いておきます。<アイフォンアプリをアンドロイドに移植開発>アイフォンアプリは、スマートボードを利用してViewを作成すると便利です。アンドロイドは、1アプリで画面展開を一覧表示する機能はないので、1View1画面毎に表示して、作業をします。レイアウトXMLがView画面に相当し、JAVAクラスからでもオブジェクトを作成できます。objective-Cと書いた場合は、アイフォンアプリについての説明を記載したものです。細かく区別せず大きな枠で説明しています。解釈上意味不明なところがあると思います。“OK”);最初の引数はタグで、ログキャットのタグの列に表示されます。第2引数はテキストの列に表示されます。OKとして、列に別れて出力されます。こちらの方が見やすいかもしれません。2.ボタンアクションコードの記載方法XCODEの場合は、IBActionのメソッドに記載します。JAVAの場合は、いくつかあります。以下のコードは、少し、コードが長くなります。他にも、レイアウトxmlのボタンに記載してメソッドのように整理できる記載もあります。今回は書籍でよく見かけるコードにしました。stub}});と、メソッドの引数の中に、メソッドがあるように記載します。SQLite3,CoreDataアイフォンでは、PCで事前に作成したSQLite3のファイルをそのまま利用して読み込みます。書き込みは、CoreDataが利用できます。CoreDataのエンティティ(テーブルみたいなもの)が増えた場合は、インストールしたアプリを削除しないとアプリが起動しない場合があります。アンドロイドデータベースSQLite3のファイルを参照のみの利用でも、assetフォルダに保管し、使用するときにSQLite3ファイル自体を一旦コピーしてから利用します。assetフォルダに配置するファイルは1MB以下にする必要があるとのこと。大きすぎるファイルは要注意です。分割するか圧縮する必要があるようです。アプリに取り込む4.オブジェクト、ボタン、ラベル、テキストエディットXCODEでは、ボタン等をViewに配置し、ヘッダーファイルにドラッグし紐付けします。プログラムで使用しないオブジェクトは紐付けの必要はありません。JAVAでは、レイアウトのXMLで配置し、クラスに宣言、命令を記載します。異なるクラスでも同じレイアウトXMLを利用できます。5.レイアウトVIewの他クラスの利用アイフォンオブジェクトを自由に好きなように配置できます。アンドロイドレイアウトのXMLに別のレイアウトXMLのオブジェクトを利用できるレイアウトの自由度は低い。ウェブブラウザーで表示するhtmlファイルです。様々な画像サイズのタブレットに対応できる柔軟性を持っていますが、デザイン性が低くなるかもしれません。6.クラスをまたがって変数を共有するXCODEでは、デリゲートを使用します。JAVAでは、Applicationを継承したクラスを作ります。Activityにまたがってグローバルに変数などのオブジェクトを共有するには7.画像、音声ファイルアイフォンプロジェクトのどの場所でもよいですが、フォルダをプロジェクトに作ってわかりやすく配置します。アンドロイドresフォルダに保存し、音声ファイルはres/rawに保存します。8.エミュレータアイフォンアイフォン、iPadのエミュレータが起動します。レティナ対応のiPadは大きすぎるので、縮小して表示します。難しい設定はありません。アンドロイドどのターゲットのエミュレータを起動するのか設定し実行します。エミュレータが実行しても、アプリが起動しない場合は、、、、、を選択します。ここが一番わかりにくかったです。レイアウトに配置されたTextViewに、文字配列を与えてListViewに表示するアイフォンテーブルビューを使用します。answerの文字列をそれぞれ与えます。このコードにはありませんが、listview.xmlのListViewに表示させるものです。(2)は、マップなしの単純なArrayListを、listview_row.xmlに配置されたtextView1に配置させるものです。バックパック」は、GoProカメラ用のLCDタッチスクリーンです。カメラ背面に装着し、フレーミングや再生など、LCDスクリーンの利便性を提供します。脱着式なので、不要な時は取り外してGoProカメラをできるだけ軽く小さくコンパクトにすることができます。iPhoneとcocos2d-xです。iPhoneでは、レティナ対応のとき、画像のファイル名は-hdを付記してファイル名としました。これは、aaa.png,aaa-hd.pngというファイルを用意すると、aaa.pngで指定すれば、あとは勝手に判別してくれました。いちいち、aaa-hd.pngとして指定する必要はありません。cocos2d-xでは、その方法が異なります。これはアンドロイドにも対応しなければならないため、-hd,-ipadhdとするだけでは対応しきれないと判断したとのこと。移植に手間がかかります。それぞれのスクリーンサイズ、プラットフォームに対応するフォルダーを個別に作成し、同じファイル名にするそうです。iOS-folder、Retina4、Retina3.5、Android−A、Android-Bのように分類するみたいです。iPad,iPadRetina,nomalAndroid-folder,type1024,typeB,nomalみたいにしてみます。パスを指定するコードを各自用意するようです。studycocos2dx・画像の座標取得の場合の注意ツール(複数の画像を一つの画像にまとめて座標のListにしてくれるソフト等のことをここでは指しています)を使って、画像の座標を自動で設定する場合はソフト側が自動で処理してくれるのでプラットフォームや解像度別に座標の比率を考慮する必要はありません。ツールを使わずに、ペイントソフトで目算で座標を取得、メモしたりするときは注意が必要です。ツールを使わないのかというと、ツールの使い方を覚えるのが面倒であり、修正があるたびにツールを使って修正しなくてはならないので面倒であるからです。扱う画像やアニメーション画像が少ない場合は、ツールを使わずに、ペイントソフトで座標を取得した方がわかりやすくて早いのです。iPhoneでは、レティナか非レティナで画像の座標を変更する必要があります。レティナ対応の場合、100ピクセルの正方形画像があった場合、実際は50ピクセルとして表示されます。これはレティナの密度が倍の密度だからです。そのため、100ピクセルサイズの座標を取得する場合は、半分の100/2のサイズで取得するようにCGRectMakeを指定します。作成した実サイズの大きさ(領域)で指定するのではなくて、実際に表示される大きさ(領域)で指定すると言うことです。(1ピクセル1ドットとして説明していますので、ピクセルとドットの概念を取り違えているかもしれません。)次に、cocos2d-xでは、100ピクセルの正方形画像があった場合、レティナであっても、そのままのサイズで指定します。iPhoneとは異なるCGRectMakeを指定することになります。そのままの画像の座標を指定すればよいのです。指定したサイズがスプライトして表示されます。レティナであれば、その半分のサイズ(倍の密度)で表示されます。このように、フレームワークが異なるといろいろと設定が異なってきます。いった設定をきちんと把握することが必要です。delta)、タップイベント4cocos2d-xの参考になるサイトです。*array;(初期化、配列数、オブジェクトの追加は省略してます。*array;(初期化、配列数、オブジェクトの追加は省略してます。CCSprite();sprite=(CCSprite*)array->objectAtIndex(i);sprite->autorelease();・表示可否ビジブルTRUEで表示、FALSEで見えない状態にします。iPhone宣言.h特に記入なしシングルタップなので、init()内に記載なし。バーチャル仮想関数で宣言します。class="selector01">・CCLabelTTF</h4>CCStringはNSStringの変わりのように利用できません。char型になります。];↓cocos2d-xCCStringはそのままでは使えません。char型にする必要があります。アンドロイドへのクロスプラットフォームのことがあるので、余計な道に入らない王道で記載します。limiTime->setString(climitTimeString);init側ならばリリースができる。spriteWithFile:@"base.png"];restSprite.contentSize.height;//これを代入したりますがここでは省略してます。CCSprite();restSprite->initWithFile("sample.png");restSPrite->autorelease;restSprite->getContentSize().height;//これを代入したりますがここでは省略してます。tmpRandom=arc4random_uniform(5);・CCArrayにint型を挿入する方法、これがcocos2d-xに見当たらないので、vectorにするCCArray型のarrayにintを追加します。NSNumberオブジェクト使ってINTを配列に入れます。numberWithInt:(30)]];↓cocos2d-xオブジェクトであれば、CCArrayに追加、挿入できますが、int型なのでできません。cocos2d-xに移植する過程を試みていますが、結構進みません。objective-cをc++にしようとするとかなり時間がかかりそうです。・スプライトの作成の場合の比較C++であるcocos2d-xは、オブジェクトの生成の時にnewを使用します。一方のobjective-cはそのまま記載して画像を設定します。CCSprite::createWithTextureでは、autorelease()を設定すると実行後しばらくしてエラーになる。半自動か、手動管理のメモリ管理を決めましょう。//Textureの設定ではinitでも::createでもOKでもautoreleaseはinitになる。cocos2d-xに移植する過程の記録メモ、Androidクロスプラットフォーム化へ1楽してスマートフォンの二つのプラットフォームに対応したアプリをつくるには?スマートフォンの市場は、アイフォンとアンドロイドの2つの勢力でほぼ占めています。アイフォンで作ったアプリをAndroidへも展開することで、ごく単純に考えて2倍のダウンロード数が可能になる計算になります(実際は、そこまでいかないでしょうけど)。アイフォンアプリは、MacOSX上で動作するXCODEでobjective-cを使用します。アンドロイド用アプリは、JAVAを使用します。objective-cとJAVAなわけですから、かたやオブジェクト指向のC言語(C++ではないのにオブジェクト指向)とオブジェクト指向の本流の言語として、開発環境が異なると言うことになります。ゲームシナリオやアルゴリズム、画像、音楽データ、データベースなどは同じものが使えるとして、コーディングについては、ほぼ別のものを作る必要があります。コードを共通化したいそこで、クロスプラットフォームとして、cocos2d-xを使うことにします。アイフォンアプリでゲームを作るためのフレームワークで、xcodeでobjective-cを使います。「cocos2d-x」はアイフォンアプリでゲームを作るためのフレームワークで、xcodeでc++を使いますcocos2d-xのメリットは、Androidアプリを作るためのクロスプラットホームのための効率化です。アイフォン用として動作するアプリ(コード)がAndroidアプリと動作することができます。アイフォンアプリを作ってAndroidへ移植する時の効率が非常に優れていることです。iPhone」で作った場合、Androidへそのままコードをコピペしても動きません。ゼロからJAVA用に書き換える必要があります。iPhone」はobjective-cでコードを記載するので、MacOSX,iOSアプリを作っている人が利用しやすく、objective-c固有のコードやライブラリを使用することができます。ゲームの世界でobjective-c固有のコードやライブラリを使用するのは多いことではありません。クロスプラットフォームとして考えるとどうしても「cocos2d-x」が優位と考えられます。ゲームメーカーも「cocos2d-x」を利用しているそうです。iPhoneとcocos2d-xのどちらもcocos2dと冠しているのでコマンドの内容や指定手順はほとんど同じです。objective-cかc++というほんの少し文法が違う点を除けば、同じ感覚でプログラムを作っていくことができます。cocos2d-xに移植しAndroidアプリとして公開しようと思います。今回が初めての試みですので、途中で挫折するか、別のアプリを作成する方向に変わるかもしれません。そのときはごめんなさい。<第一回>キャラクタクラスを作成し、画像を表示するクラスの作成CCSpriteクラスを承継するcHiyokoクラスを作成スプライトを設定し、クラス生成C++の文法を忘れてます。ほんとに覚えることがあって大変です。objective-cのコーディングになれてきたのに。(正式な方法や正式名称を使わずに、説明しているところがあります。)objective-Cでは、クラスをvoidをかっこで挟んで、マイナスをつけます。AA.m-(void)function{//メソッドのあとに、かっこがない}となります。C++ではクラス名があって::をつけてメソッドを書きます。AA.mmクラス名::function(){//メソッドの後にかっこ必要}まず、C++なので当然ながらプロパティがなくて、マクロを利用します。spriteHiyoko);こんな感じ。このとき、型の宣言とプロパティ、シンセサイズまでまとめて設定されます。クラスメソッドは、ID型がないので、boolかstaticにしてポインタにします。ここらへんがややこしくなります。scene();みたいになります。インスタンスメソッドは、マイナスのついたメソッドのことですが、boolになります。<感想>objective-cからC++への移植は思ったよりも難航しそうです。何を何から変えてよいのかわからない。delta)、タップイベントcocos2d-xの参考になるサイトです。*array;(初期化、配列数、オブジェクトの追加は省略してます。*array;(初期化、配列数、オブジェクトの追加は省略してます。CCSprite();sprite=(CCSprite*)array->objectAtIndex(i);sprite->autorelease();・表示可否ビジブルTRUEで表示、FALSEで見えない状態にします。iPhone宣言.h特に記入なしシングルタップなので、init()内に記載なし。バーチャル仮想関数で宣言します。CCArrayにint型を挿入する方法、これがcocos2d-xに見当たらないので、vectorにするCCArrayにint型を挿入する方法がわかりました。CCIntegerを使うみたいです。size=CCDirector::sharedDirector()->getWinSize();size.widthsize.height・CCLabelTTFCCStringはNSStringの変わりのように利用できません。char型になります。];↓cocos2d-xCCStringはそのままでは使えません。char型にする必要があります。アンドロイドへのクロスプラットフォームのことがあるので、余計な道に入らない王道で記載します。0));limiTime->setString(climitTimeString);init側ならばリリースができる。spriteWithFile:@”base.png”];restSprite.contentSize.height;//これを代入したりますがここでは省略してます。CCSprite();restSprite->initWithFile(“sample.png”);restSPrite->autorelease;restSprite->getContentSize().height;//これを代入したりますがここでは省略してます。tmpRandom=arc4random_uniform(5);・CCArrayにint型を挿入する方法、これがcocos2d-xに見当たらないので、vectorにするCCArray型のarrayにintを追加します。NSNumberオブジェクト使ってINTを配列に入れます。numberWithInt:(30)]];↓cocos2d-xオブジェクトであれば、CCArrayに追加、挿入できますが、int型なのでできません。);//追加v_ar_speed[0];//として呼び出し可能コンテナ【vector】その後、CCIntegerを使えば良いみたいです。クロスプラットフォームによるゲーム開発]に書いてありました。それを参考にしました。i=10;(CCArrayの生成は省略します。)->getValue();でもかなり面倒なので、INT型はC++なのでvectorベクターを使った方が簡単に扱えます。(さらに追記)なお、vectorは実行速度がlistよりも遅いという記事を読みましたので、今後はlistを使った方が良いかもしれません。vectorを使ったのは、使った事があったからで、特別の理由はありません。cocos2d-xに移植する過程を試みていますが、結構進みません。objective-cをc++にしようとするとかなり時間がかかりそうです。・スプライトの作成の場合の比較C++であるcocos2d-xは、オブジェクトの生成の時にnewを使用します。一方のobjective-cはそのまま記載して画像を設定します。CCSprite::createWithTextureでは、autorelease()を設定すると実行後しばらくしてエラーになる。半自動か、手動管理のメモリ管理を決めましょう。//Textureの設定ではinitでも::createでもOKでもautoreleaseはinitになる。cocos2d-xに移植する過程の記録メモ、Androidクロスプラットフォーム化へ、まず第一歩AndEngineによるアンドロイドゲームアプリ「ひよこレスキュー」を作成しました。こちらからダウンロードできます。ダウンロードはこちらからです。広告収入のためにADMOBを入れています。(2014年1月11日追記)楽してスマートフォンの二つのプラットフォームに対応したアプリをつくるには?スマートフォンの市場は、アイフォンとアンドロイドの2つの勢力でほぼ占めています。アイフォンで作ったアプリをAndroidへも展開することで、ごく単純に考えて2倍のダウンロード数が可能になる計算になります(実際は、そこまでいかないでしょうけど)。アイフォンアプリは、MacOSX上で動作するXCODEでobjective-cを使用します。アンドロイド用アプリは、JAVAを使用します。objective-cとJAVAなわけですから、かたやオブジェクト指向のC言語(C++ではないのにオブジェクト指向)とオブジェクト指向の本流の言語として、開発環境が異なると言うことになります。ゲームシナリオやアルゴリズム、画像、音楽データ、データベースなどは同じものが使えるとして、コーディングについては、ほぼ別のものを作る必要があります。コードを共通化したいそこで、クロスプラットフォームとして、cocos2d-xを使うことにします。アイフォンアプリでゲームを作るためのフレームワークで、xcodeでobjective-cを使います。「cocos2d-x」はアイフォンアプリでゲームを作るためのフレームワークで、xcodeでc++を使いますcocos2d-xのメリットは、Androidアプリを作るためのクロスプラットホームのための効率化です。アイフォン用として動作するアプリ(コード)がAndroidアプリと動作することができます。アイフォンアプリを作ってAndroidへ移植する時の効率が非常に優れていることです。iPhone」で作った場合、Androidへそのままコードをコピペしても動きません。ゼロからJAVA用に書き換える必要があります。iPhone」はobjective-cでコードを記載するので、MacOSX,iOSアプリを作っている人が利用しやすく、objective-c固有のコードやライブラリを使用することができます。ゲームの世界でobjective-c固有のコードやライブラリを使用するのは多いことではありません。クロスプラットフォームとして考えるとどうしても「cocos2d-x」が優位と考えられます。ゲームメーカーも「cocos2d-x」を利用しているそうです。iPhoneとcocos2d-xのどちらもcocos2dと冠しているのでコマンドの内容や指定手順はほとんど同じです。objective-cかc++というほんの少し文法が違う点を除けば、同じ感覚でプログラムを作っていくことができます。cocos2d-xに移植しAndroidアプリとして公開しようと思います。今回が初めての試みですので、途中で挫折するか、別のアプリを作成する方向に変わるかもしれません。そのときはごめんなさい。<第一回>キャラクタクラスを作成し、画像を表示するクラスの作成CCSpriteクラスを承継するcHiyokoクラスを作成スプライトを設定し、クラス生成C++の文法を忘れてます。ほんとに覚えることがあって大変です。objective-cのコーディングになれてきたのに。(正式な方法や正式名称を使わずに、説明しているところがあります。)objective-Cでは、クラスをvoidをかっこで挟んで、マイナスをつけます。AA.m-(void)function{//メソッドのあとに、かっこがない}となります。C++ではクラス名があって::をつけてメソッドを書きます。AA.mmクラス名::function(){//メソッドの後にかっこ必要}まず、C++なので当然ながらプロパティがなくて、マクロを利用します。spriteHiyoko);こんな感じ。このとき、型の宣言とプロパティ、シンセサイズまでまとめて設定されます。クラスメソッドは、ID型がないので、boolかstaticにしてポインタにします。ここらへんがややこしくなります。scene();みたいになります。インスタンスメソッドは、マイナスのついたメソッドのことですが、boolになります。<感想>objective-cからC++への移植は思ったよりも難航しそうです。何を何から変えてよいのかわからない。単純にそのまま、表示させる程度のものでも。現在のところ、cocos2dXについての開発を中止しました。アンドロイドアプリではダウンロードされそうにないみたいなので、無理して、クロスプラットフォームで開発する必要がなくなりました。今後はアイフォン向けアプリとUnityの開発にしようと思います。from云々かんぬんのエラーが発生しました。コードの記載が間違っているのかと思っていたら、XCODEの設定だそうです。Membershipを設定すると良いそうです。targetmembership.jpg今回のメモリ表示は、「達人のレシピ100」に記載されているものを自分コードに合うように変更しました。cocos2dの場合はAppDelegate.m,hに記載しました。サンプルコードのままでは表示されなくて、Admobで動作した記載を参考にしたら、表示されました。画像、アイフォンキャプチャ画像こんな感じで表示されます。メモリ使用量を見ると、なんどもゲームを繰り返し遊んでいると、メモリがどんどん増えているのがわかりました。どこかのタイミングでメモリを解放しないと増え続けそうです。複数台のMacで開発(1)iPhoneシミュレータの判別方法メモシミュレータでアイフォン、アイパッドのRetinaレティナかどうかの判定ができないか探していますが、見つかりません。シミュレータでは、非RetinaにしてもRetinaが返ってくるので、解像度に合わせた確認ができないでいます。理由は、CGRectMakeで座標座業を取得しているので、Retinaかどうかで、画像を切り替える必要があるからです。スプライト一つに一つの画像を用いれば、もっと楽ですが、頻繁にファイルを読み込むので、電力消費と、FPSの低下が心配なので、テクスチャを一つにしてます。切り替えるテクスチャ数が少ないので、info.plistは使っていません。seven(2)今日のアイフォンアプリ開発記録1.アイパッドのデバイスを登録しました。これで、アイフォンとアイパッドで実機確認ができます。2.アイパッドで実機確認をして、画像が正常に表示されていないバグ(コードのミスではない)がありました。これは、ipadhd,ipad,hdという風に、ファイル名をつけますが、その通りになっていてもcocos2dの方で、正常に判別できていませんでした。そこで、アプリを実行する現在の機器がどの機種であるのかを表示サイズと比率で判別して画像を選別するようにしました。これは、画像単体をそのままスプライトにする場合は、問題ありません。判別はちょっと面倒でした。シミュレータ上では、レティナタイプと非Retinaタイプの判別はわかりませんでした。この問題が発生するのは、CGRectMakeを使用して1枚のテクスチャから部分領域を切り取ってスプライト設定する場合に発生する問題です。その理由は、Retina対応によるものです。Retinaは2倍の密度を持つために、画像のピクセルが100ピクセルあるとすると、実際の表示は、50ピクセルになります。1対1の場合は、100ピクセルのサイズとなりますが、Retinaになると1:2になり、凝縮された画像のようになって半分の50ピクセルで表示されます。そのため、CGRectMakdeで領域を指定するときは、実際の半分の座標で領域を指定する必要があるのです。左上側から50ピクセルの高さと幅の画像領域を指定したいとすると、(0,0,50/2,50/2)または、(0,0,25,25)のように指定します。実際の大きさの半分のサイズで指定することで、Retina対応の機器は画面上で、25ピクセルの画像として表示します。そのため、Retinaの場合の領域指定と非Retinaの場合の領域指定は異なります。今回は、アイフォンRetinaとiPad非Retina,iPadRetinaの画像を用意しました。アイフォンのRetinaとアイパッド非Retinaはほぼ同じサイズとして使用しましたので、実質は2種類の画像を用意して、ファイル名を変更することにより、効率化しました。全体の画像容量は、単純にアイフォン1種類に比べて、3倍以上になります。できるだけ高解像度の画像を用意することで、実機で確認したときに、きれいな画像が表示されるのを確認するとやはり高解像度を使用した方が良いと実感しました。ドット絵を使用する賢いやり方もありますが、その場合は、キャラクターがカクカクしすぎてせっかくの高解像度が台無しになったような気がするからです。info.plistを使用していれば、たぶん問題とならないでしょう。info.plistを使用しないのかというと、info.plistを使用するほど、スプライト数が多くないからです。画像の変更も多くて、いちいちinfo.plistを変更するのが、面倒だからです。扱うソフトを覚えるのも面倒というのも理由です。<検討中>3.ccTouchMovedで、スワイプしてもキャラが動かないシーンがありました。1面ではEndのみ正常、ボス面は正常にスワイプできました。1面とボス面は同じコードをコピペしていて、Diffでも同じでした。同じコードといいながら違うコードを記載していることもあるので、動いてる方を動いていない方のコードに入れ替えてみます。これで、動かないときは、どうしましょうか。>いまここ4.一時停止中にホームボタンを押して、アプリを切り替えるとアプリが勝手にアニメーションを開始していました。本来は、復帰後も一時停止となるはずです。AppDelegate.mのapplicationDidBecomeActiveにシングルトンを設定しました。前回のエラー、広告が表示されないはこちらアイフォンで広告表示AdMobのSDKをGoogleAdMobAdsSdkiOS-6.4.1としました。