前回に続いて第二回目になります。
僕が作ったゲームはFlickRPGと言い、

忍者

【戦い画面】

お店

【装備画面】

こんな感じのアクションRPGゲームです。
特徴はフリックでキャラクターを扱い、敵と戦うと言うiPhone向けのRPGゲームである。
それをWebプログラマーである僕が作ったので、Webプログラムとの差異を見て行こうと思う。

3.フレームワーク
これは僕の作ったゲームに依存しているが、Webプログラムはサーバーサイドプログラムが主流になっているがアクションゲームではクライアントサイドだけでゲームを完結する事ができる。(僕の作ったFlickRPGではクライアントサイドのみだが、通信が発生するゲームではサーバーサイドも入ってくるだろう。)
僕はクライアントサイドだけで完結させるフレームワークを作ったので、そのフレームワークとRoR(Ruby on Rails)を比較してみる。

RoRはリクエストがあるとControllerに処理が委託されてそこからModelを介してDBへのアクセスを行います。そして、そのデータを元にViewを組み立ててHTMLを作成して全てのオブジェクトを解放します。

僕のゲームではデータへのアクセスは全てメモリになります。このゲームはクライアントだけで処理が完結するのでDBやファイル等の媒体を使う必要がないためメモリアクセスだけになります。そのタイミングは1/60秒に一度アクセスされます。(描画は1/30秒で行ってます。通常これを30FPSと言うらしいです。)なので、一連の処理は1/60秒間に一度キャラクターの位置情報や打撃の計算等を行い1/30秒に一度その情報を画面に書き込みます。
また、これらの情報とは別にフリックやタップといった外部情報の処理も行います。(これはappleが用意したインターフェースを使用して処理を記述。)
RoRと大きく違うのは処理系統が二種類あるため、フレームワーク化し難いと言うところにあります。(もう既にフレームワークがあるのかもしれないが、僕は自分で作成した。)

4.オブジェクトの継承関係について
これは僕の勉強不足のせいだが、、、Rubyとobjective-cではオブジェクトの使い方に差がある。例えば、親子関係で親が子のオブジェクトを呼び出す事ができない。(子をimportをすると循環参照となるため。回避出来ると言う話も聞くが勉強不足で分からず。)
また、子供同士の呼び出しも循環参照となるため呼び出せない。(これは恐らく回避出来るはずだが、方法は調べてない。)
こうなると、例えばキャラクタークラスで位置情報を管理してプレイヤークラス敵クラスと言うクラスに分けた場合にプレイヤークラスから敵クラスに攻撃する際に直接敵クラスを呼び出す事ができないのだ。これがとてももどかしい。ダメージ判定をする為にキャラクタークラスにポリモルフィズム用のメソッドを用意したりクッションクラスを用意しないと解決出来ないのだ。

RubyやJavaの場合はこういう面倒なところを全て解決してくれているのでフレームワークを作りやすいが、objective-cでは厳格なオブジェクトの継承関係を考えて作らなければならないのでWebプログラムで適当にオブジェクト指向を学んでいる程度の人ではobjective-cのオブジェクト指向は理解出来ないだろう。(というか、これくらいは言語仕様で解決させて欲しい・・・。)

その3に続く。