はじめからあるLayerClassは?

  1. IntroLayer.m
  2. HelloWorldLayer.m

というクラスがある。

IntroLayerは起動時すぐに呼ばれるScene。新たなプロジェクトを作った状態ではcocos2dのロゴが一瞬初期表示されるがそのロゴ表示部分がここに書かれている。表示後、HelloWorldLayerのsceneに移動するよう書かれている。

HelloWorldLayerには新規作成時にはHello, world!とテキスト表示するコードが書かれている。

つまり、新規cocos2dプロジェクトを作成すると、2つのsceneが用意される。

あとはHelloWorldLayerを真似てSceneが必要なだけLayerClassを作成しておき、条件に応じて次のSceneに移動するようプログラミングしていけばよい。

これがcocos2dの画面遷移の考え方。この概念を知ってからソースを読むのとそうでないのでは理解度が全然違う。

まず頭に入れたいこと

初めに断っておくけど、私は技術者ではないので不確かな書き方もするし、内容に怪しげな部分もあると思う。そこは必要に応じて知ってる人が補足して欲しい。たのんだ。

Install方法はあちこちに書いてあるからそっちを読んでくれい。

cocos2dでは、sceneとlayerで画面が構成されている。sceneはページ。layerはsceneの上に透明に重なるレイヤー。

例えば、起動時にタイトル画面を出して、startを押すと実際のゲーム画面に移る、勝つと勝利画面に移動、というゲームだとすると、

  1. TitleScene
    • タイトル画面を表示する
    • startを押すとGameSceneに移動
  2. GameScene
    • ゲーム画面を表示する
    • 実際のゲームロジックもここに
    • ゲームの終了条件(敵を倒すetc)を満たすと、GameOverSceneに移動
  3. GameOverScene
    • ゲームオーバー画面を表示する
    • ハイスコア更新、ランキングも表示させたりして
    • 5秒後に自動的にTitleSceneに移動

みたいな感じで3つのSceneを作る。
少なくともScene毎にクラスファイルを分けておくと便利。

ちなみに

cocos2dに互換性があり、機能アップしているkobold2dというフレームワークもある。

FAQには「いきなりkobold2dではじめても大丈夫だよ」と書かれているが、世の中のサンプルソースはほぼcocos2d用なので、まずはcocos2dをオススメする。

同様の理由で、はじめはARCを有効にせずにいた方がよい。

cocos2d、悪くないかも

ゲームならゲームに強いフレームワークを使えばいいじゃないか、ということでこれまで敬遠していたcocos2dに手を出すことにした。

最初は「考え方」が分からず、ソースを読んでもサッパリだったけどWeb上にあるサンプルプログラムやチュートリアルを読み漁るうちに要領がつかめてきた。しばらくcocos2dを使う予定なので、本ブログにはメモがてら軌跡を残す所存です。

初心者向けiPhoneアプリ開発本の限界?

本屋に並んでいるiPhoneアプリの習作をしてるけど一向にレベルアップした気がしない。

一言でいえば、本質的に理解が進んでいかない。なんでか。

たいていのサンプルプログラムはUIViewを使って著者の「都合良く」コンパクトに組み上げられている印象がありその実装方法を選んだ必然性が見えてこない。

ので、サンプルプログラムを参考に類似アプリを作ろうにもすぐに障壁にぶつかってしまう。いくら数をこなしても一向に「できるようになった」感がしない。

まずは単純なゲームを作ろうと思ってみたものの、UIViewを使って画像を表示し、touchイベントでUIViewを動かし、衝突検知して云々という一連の作業を自前実装するのは大変だし無駄が多い。UIViewの当たり判定をする方法は乗ってるけど、全部のUIView同士を各フレームでforループで総当たりチェックするの?もっと効率いい考え方あるんじゃない?的な疑問がわいてくるはず。

一周というか二周は回ったな、

はてなダイアリーにメモを書いていたことすら忘れていた。

最後にエントリーを買いてから約2年。
いろんなことがあったが、大きなところでは何も変わっていない。過去から続けているシステム開発を”宮大工”が遷都するように定期的にリプレイスし、わずかばかり新しい技術と知識を身につける。そして、英語だのマラソンだのと新しいことにもチャレンジし、それなりの実績を得てホクホクしている。充実した毎日に見えるかもしれないが、単に何かにチャレンジし続けないと死んでしまうのではないかという恐怖に追われているだけなのかもしれない。

先日MacbookAir 11" 2013に買い替えた。2011 lateからの買い替え。メモリが倍になり、SSDも倍になり、ベンチの数字も3倍くらいになったらしい。確かにサクサク動いている気がする。Google chrome上でブログエントリーを書いても漢字変換にもたつかないのがうれしい。けど、一番うれしいのはキーボードにLEDバックライトがついたこと。これで暗いところでも作業ができる!手元が暗いのが気になってたんだよね〜。

新しいPCに変わったことで、また宮大工の遷都作業をはじめた。今回はTwitter API 1.1に対応できるようにするため、ライブラリを一新。githubに登録している作者の方に連絡をとってみたりしながら作業を進めている。一通りマイグレーションを終わらせてしまうと手をつける気力がなくなるので、今回は新機能を盛り込みながら作り込みの作業を行っている。これまでいい加減に処理していたページ。だらだらと100件以上のリストを表示させていたページに、paginationを組み込む。そこでcakephpkmlを吐く必要がでてきたため、ググってみたら3年前に書いた自分のエントリーにhitしたという訳。

今ならやれるかもしれない。やるよ?


30分後。

過去の自分に勝った!!!

やりました。cakephpからkml吐きました。

ただーし。kmlLayerとして読み込むには開発環境のurlではダメっぽい。
ということで一旦は同ファイルをstaticにレンタルサーバに保存してテスト。

本日は某大学の図書館で作業

後期試験まっただ中のようで学生だらけの図書館だが、それがいい刺激になる。家にいるとつい昼寝でもして過ごしてしまいそうな時間を作業に費やそう。

先日よりさくらのVPSサービスへ移行作業中なんだけど、cakePHPのプログラムがうまく動かないので原因を探ることにしよう。あと、画像のサムネイルをpopupで表示する仕様にしたらWebサーバにやたらと負荷が掛かるらしく、popupしないものが続出。ちょっと考えなきゃいかんね。

と思ったら導通は済んでたらしい。AP改修したい部分もあるけど、環境構築と並行するとわけわかんなくなるので別の頭で作業することにしよう。じゃあ何しようかな。アクセスが多い時間帯だから今DNS切替作業とかしたくないしwこの際だから、Apache周りのパフォーマンスを見直そう。