トップページへ戻る
つくれる?iPhoneアプリ
cocos2dを使ったiPhoneアプリ制作を解説してみる

つまらないはまりと解決


どのページでも
ご自由にリンクしてください。

感想ご要望はお気軽に!
info@taskinteractive.com


■インデックス
インデックス

■順番に解説
・導入
その1
導入


その2
HelloWorld


その3
わからない単語でも安心


その4
いじるファイルと画面構成


その5
ソースにある単語を手探る


その6
実行の順を追って手探る


その7
クラスの名前と素性を手探る


・サンプル1
その8 ボール遊び1
Scene/Layer/Sprite


その9 ボール遊び2
ファイル名を変えてみる


その10 ボール遊び3
ソースをいじってみる



■項目ごとに解説
クラスの解説
その1 クラスって何?


クラスの解説
その2 インスタンスって何?


クラスの解説
その3 オブジェクト指向って何?



クラスの解説
キリッと クラスの書式1




cocos2d HelloWorldScene
cocos2dデフォルトのサンプルを解説


企画・販売元タスクインタラクティブ


つまらないはまりと解決

作業をしていると、ひょんなことから酷いはまりに陥って、何時間もそれに煩わされることがあります。
実際にはすごくつまらないミスだったり、参考にしている解説のバージョンが違いメッセージが違うだけだったりすることがあります。

ここではそんなはまりと解決を列挙してみました。

・・・本当につまらないことだらけですよ。。。



NSArray


○オブジェクトの配列が作れない! + と -

+(id) arrayWithObjects:(id)firstObj, ... NS_REQUIRES_NIL_TERMINATION;
-(id) initWithObjects:(id)firstObj, ... NS_REQUIRES_NIL_TERMINATION;

上記のクラスメソッドとインスタンスメソッドの混同をしている。


arrayWithObjects は + で始まるからクラスメソッド。
initWithObjects は - で始まるからインスタンスメソッド。


クラスメソッドで配列を作る場合は

NSArray *testArray;
testArray = [NSArray arrayWithObjects:@"0",@"1",@"2",nil];


ですが、インスタンスメソッドの場合、先に alloc を忘れてはいけません。

NSArray *testArray;
testArray = [[NSArray alloc] initWithObjects:@"0",@"1",@"2",nil];


または、
NSArray *testArray;
testArray = [NSArray alloc];
testArray = [testArray initWithObjects:@"0",@"1",@"2",nil];

ですね。



○オブジェクトの配列が作れない! nil 忘れ


上記のメソッドの後半、  NS_REQUIRES_NIL_TERMINATION  これは、要件はnilで終わるよーというような意味です。
最後にnilを付け忘れてもプログラムは実行してしまうので、意外と気が付かなかったりします。




NSLog が超重い

便利なので開発中には多用する NSLog ですが、冗談のような話で、これがあるがために cocos2d の fps が一桁まで落ちたりすることがあります。

開発中にどうしてもスピードが出ない、fpsが稼げない、でも、コンソールのログは順調に処理が進んでいる様子を書き出している、というときは、NSLogをすべてコメントアウトして試してみましょう。

NSLogを使うときは、ログを書き出すチェックモードを作って書き出す、書き出さないを設定できるようにするか、不要になったものからコメントアウトしていったほうがいいでしょう。




NSString で??

OS2.2.1ではまった現象ですが、NSString/NSMutableStringの中身を動的に生成して、同インスタンスオブジェクトの別メソッドに引き渡したら、BAD_ACCESSになることがありました。

使い方が悪かったのか不明ですが、一応メモしておきます。