FrontPage > GameDevelopment > Objective-C (Now)
はじめに †
Macユーザなら、Objective-Cでしょ!
てなわけで、Objective-Cでゲームを作っていこうと思います。
今(2009.09現在)、NowでHotなiPhoneでの開発がメインになってくると思います。
Contents †
iPhoneでRPGを作ろう! †
まずは戦闘システムから! †
いきなりでドびっくりですが、まぁ、戦闘システム作りましょ、楽しいし。
- 仕様
テキストベースで、シェイクとかタッチとかで進める、ドラクエ風味な感じのやつを作ります。
- まずはリサーチ
Objective-Cで、同じようなプログラムが落ちていないか探してみます。
日本語のドキュメントは、残念ながらなさそう。
ただ、英語のドキュメントはありました。海外レベル高い。
あれ、肝心のRPGのソースコードはないなぁ...。
自分で作れってことですね、はい、最初からわかってました(笑
- アイディア
- メインループ中で、デバイス操作を通知し、それに伴う動作を行う。
これだけだわ。簡単簡単...たぶん。
- やってみよう!
なにはともあれ、作ってみないと始まらない。
XCodeを起動して作成開始〜です。
- NSLogで動く、テキスト戦闘
iPhoneSDKで、わっけわかんねー!!となる前に、まずは戦闘システムを作ってしまいます。
ま、ここさえできれば、あとは表示するにはどうするか考えるだけなので、6割完成としていいでしょう。
開発中メモ †
- UIWindow
- UIViewController? - init
loadVIew:
子となるUIViewオブジェクトを作成して、それをViewController?にアンカーする。
つまるところ、ここで表示するオブジェクトのインスタンス化を全部行ってしまえばいいのかな?
- UIView - initWithFrame?:CGRect...
サイズ指定必須
インスタンス化されると、[drawRect(): (CGRect)_rect]が自動的に呼び出される。
- テキストを残しておきたい場合のアイディア
スクロールしていくテキスト(チャットみたいな)を作る場合、配列に入れて、ある程度たまったら消していく...
あっ!スタック使えば良いんだ!
なんだ、そうかそうか。
NSMutableArray?クラスが、とにかく便利。
遭遇したエラーと、解決策一覧 †
- error: request for member in something not a structure or union - 構造体、共用体ではないなにかがメンバーとしてリクエストされています
- ポインタ関連のエラーみたいなのですが、実は使い方は間違っていませんでした。
ただ、UIView に loadView() を実装していた管理人が馬鹿なだけです...orz
loadView() は、UIViewController? のインスタンスメソッドだってーの...。
- 表示されない! - [UIView addSubView?:] の使い方
- なんか、おかしい。おかしいぞ、表示されない。
と、おもったあなた。
とりあえず、インスタンス化したついでに、addSubView?: を使って既に表示されているViewに、サブビューとしてアンカーしましょう。
- 表示されない! - アンカーする対象の違い
- addSubView?: するにも、どこにアンカーすればいいの?
とりあえず、ソースコードを見ると、self.view と self の違いがある。
これらの違いは、そもそもなんなのか?
viewプロパティについて調べてみた。
UIViewController?クラスのプロパティで、そのコントローラが管理しているUIViewのことみたい。
ほいでは、どうするのか。
とりあえず、おまじない的な法則としては...addSubView?: のアンカー先は
1. UIViewController?では self.view を使う。
2. UIViewクラスでは、self を使う。
でいいみたい。
- やったー!Viewインスタンスが表示されたー!けど、ずれてるぞー! - applicationFrames と bounds の違い
- UIInterfaceOrientation?って、どうつかう?
- 実は、UIViewでは、回転する度に[drawRect:]が呼ばれているのだった!
で、肝心の使い方はよくわからない!!(笑
向きとか云々の前に、回転する方向とかを定義するものなのかな?
加速度センサとかセンサ類のHackのときに調べてみたいと思う。
- Tocheで関数を起動したい
- UIView は、UIResponder というクラスを拡張しているので、何もせずにタップイベントを受け取るみたい。
ただ単にクリックを実装するだけなら、UIResponder クラスにある touchesBegin: という関数をOverride 定義すればよい!
- Touch Event を受け取ってくれないよー - UIView.userInterractiveEnable?
この propaty を NO にすると、NOにした の View からの interraction を 無視するようになるので、これでただの表示物になるわけです。
- UIAlert が実機でうまくいかない! - なにか忘れていませんか?
- UIAlertのオブジェクトには、必須の委任クラスがあります。その名も...。
alertView:clickedButtonAt?: というメソッド。
これを必ず実装しないといけないみたいです。
- NSArray ってどうつくるの? -
- なんかこう、要素を入れている動作をしているはずなのに、NSLog() には (null) しか表示されないんだよな。
クラスクラスタとして実装してあるとか、なんとか?
生成と初期化の仕方も微妙に違うみたいだし、どうするんだろう。
あれ、普通に生成と初期化できた...。クラッシュエラーがでていたのだけど、何が逝けなかったのだろう。
リンク †
iPhone Development 関連 †
iPhone Game Development 関連 †
Webサーフィン中に見つけたリンク †
参考文献 - もっているもの †
Objective-C 書籍 †
iPhone SDK 書籍 †