リンク
とp

2012年09月18日

その6、iPhoneアプリ開発中、cocos2d,開発履歴、目指せー副業収入:2012年9月1日から9月17日クラス間の値渡し、

今週のアイフォンアプリ開発日誌、クラス間の値渡し、
その6、iPhoneアプリ開発中、cocos2d,開発履歴、目指せー副業収入:2012年9月1日から9月17日

アイフォンアプリ開発の状況です。
---------------------------------
(1)作業環境:MacBookPro 2012/06mid 15インチ
(2)プロジェクト名:BostonEight
(3)ファイル、クラスの構成:cocos2dver2.0の基本テンプレートを基にしています。
(4)基本的な仕様:現時点
ひよこをある一定数タップすると次のシーンへ移動。

制限時間が0になるか、ひよこがワニに食べられると、ゲームオーバーシーンとなり、数秒後に再度ゲーム開始。
・ひよこがA点からB点へ移動
・ひよこはアニメーション
・ワニはアニメーション
・制限時間の表示(現時点はNSTimerを使用)
・残機(ひよこを救えなかった数をある数値から引いて表示)


・ゲームの構成
 iPhoneアプリを起動してどのような画面表示が良いのか検討します。
タイトル画面が表示されて、メニューが表示、ユーザに選択させます。

起動して、メニューを表示させる、ユーザが選択して、ゲーム開始というパターン

今回の開発プログラムでしたいこと



ゲーム中のカウントを数えてゲームの成績画面シーンで値を表示したい。例えば、ひよこを何回タップできたかを競うゲームであなたは十回タップできましたという結果画面です。


Xcode 、cocos2dでSingletonを作ってみたのですが、テンプレートから作成したからなのか、クラスの構成が異なるのか、

単に、Singletonクラスを作成しても上手くいきませんでした。
シングルトンについてはもうちょっと、書籍とにらめっこみたいです。

そこでAppDelegateクラスを使えばできそうなので、 appDelegateクラスを使ってやってみました。
ま ず、ココスのテンプレートにはAppDelegate.m,.hがあります。
しかしAppDelegateというファイル名なのですが、 AppDelegateクラスはありません。通常クラス名とファイル名はだいたい同じことが多いのですが、cocos2dのテンプレートで作成したプロジェクトは AppControllerになっています。



image-20120919101631.png


では、クラス間で値を渡すコードを記入していきます。ここでインスタンス変数は、NSInteger *iCountになります。
AppDelegateを追加しました。実際は、追加せずにAppControllerクラスを使えば済みました。
appdelegate_h.png

()setCountは、なぜかiPhoneアプリを実行させると強制終了しましたので、実際の生成先ではコメントにしてます。
appdelegate_m.png


結論を先に言えばこのappコントロールクラスを使えばよさそうです。
helloworldlayer.mにAppdelegate(AppController)クラスに渡すコードを記述し、別クラスへ値を渡すことができました。

まず、app delegateクラスを新規に作ってまたapp controllerクラスに@publicでインスタンス変数を挿入しました。


個人でしか使わないとわかっているのでこのままパブリック変数でやっていきます。また、メソッド関数で試したらアプリがエラーもなく強制的に終了しました。そこで今回は@publicにしました。
メソッドの記述が悪かったのだと思うのですが、どこが悪いのかは今度調査します。



次に、 HelloWorldLayer.mにて、値をapp delegateに与えます。別クラスで読み取れるまたは取得できるクラス内で値が共有できることになります。
AppDelegate,Appcontrollerともにオブジェクトを生成しました。ここで与えた値が、次のGameOverSceneクラスで取得できればOKです。
helloworldlayer.png



次に別クラスGameOverSceneクラスに同様に挿入します。
gameoverscene.png
プログラムのコードの記述が終わったら、ゲームを実行してトレース、デバッグします。
値を取得できました。



ここでAppコントローラーとapp delegateのクラスを作ったものどちらも取得できることがわかりました。
クラスを生成させるとメモリが消費されると聞いたことがあるので極力新しくクラスを追加せずに行きたいと思いますので、AppControllerクラスを使いたいと思います。
(メモリの消費着いては間違った解釈をしているかもしれません。)




posted by goodman at 12:06| Comment(0) | アイフォンiPhoneアプリ開発 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス: [必須入力]

ホームページアドレス: [必須入力]

コメント: [必須入力]

×

この広告は1年以上新しい記事の投稿がないブログに表示されております。