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]が自動的に呼び出される。
遭遇したエラーと、解決策一覧 †
- 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:]が呼ばれているのだった!
リンク †
iPhone Development 関連 †
iPhone Game Development 関連 †
Webサーフィン中に見つけたリンク †
参考文献 - もっているもの †
Objective-C 書籍 †
iPhone SDK 書籍 †