この記事では、オープンソースコンポーネントに基づいてiOSゲームを開発した実際の経験を紹介したいと思います。 ゲームの開発中に行われた技術的な決定について検討します。
仕様書
まず、ゲームの仕様を決めるために座った。 仕様の準備ができるまでコード行を書かないことにしました。 もちろん、開発中に変更されましたが、大幅には変更されていません。 この仕様は、元のアイデアに遅れずについていくのに大いに役立ちました。 仕様については、Joel Spolskyの記事を読むことをお勧めし
ます。http :
//www.joelonsoftware.com/articles/fog0000000036.htmlゲームの概要
ゲームのアイデアの1つは、さまざまなゲームプレイを作成することでした。 主なゲームプレイはRTSです。

しかし、ボーナスでは、ユーザーはアーケードスタイルで撮影し、1対1の戦いに参加する必要があります。

各ステージで、ユーザーは新しいユニットまたは新しい能力を受け取ります。 最初の段階はトレーニングですが、ユーザーはレベルをクリアするために独自の戦略を構築する必要があります。
グラフィックエンジン
最初は、多くの準備ができており、新しい言語の学習に時間を費やしたくなかったため、ゲームをC ++で記述することが決定されました。 また、Visual StudioからXcodeに切り替えたくありませんでした。
エンジンとして、Ogre3DとIrrlichtの2つのオプションを検討しました。 両方のエンジンは非常に優れています。 各エンジンのAPIは理解可能であり、主要な機能を扱うのは難しくありませんでした。 Irrlichtは小さいですが、OGL-ESブランチはまだ公式ではありません。 しかし、Ogre3Dには公式のブランチがあります。 それにもかかわらず、速度で実行されたテストはOgre3Dよりも良い結果をもたらしたため、選択はIrrlichtに落ちました。
Irrlichtは次の機能を提供してくれました。
•OGL-ESを使用したレンダリング。
•ファイルからモデルを読み込む(DirectX形式を使用しました)
•ビルボード
•アニメーションモデル
Irrlichtには独自のXMLパーサーがありますが、あまり機能的ではないため、使用することはお勧めしません。 rapidxmlまたはpugixmlを使用する方が良い
また、Irrlichtアーキテクチャは、エンジンコードを変更せずに拡張機能を追加する機能を提供します。
スクリプトエンジン
私がレビューした最初のエンジンは、tiny-jsでした。 一連のテストの後、速度が遅すぎて、モバイルゲームに適さないことが判明しました。
次に、LUAとAngelScriptを見始めました。 速度の面では、両方のエンジンが良い結果をもたらしました。 AngelScriptにはCに似た構文があり、C ++を簡単にバインドする機能もあり、スクリプトエンジンの選択に大きな役割を果たしました。
新しい関数をバインドする例は次のとおりです。
_engine->RegisterGlobalFunction("void MyFunc()", asFUNCTION(MyFunc), asCALL_CDECL); void MyFunc() { // Do some work }
AI
私のプロジェクトのAIアーキテクチャでは、「ビヘイビアツリー」を選択しました。 このアーキテクチャにより、状態から状態へのあらゆる種類の移行を心配することなく、複雑な動作システムを作成できます。 そのようなアーキテクチャの簡単な例:

このアーキテクチャに新しい動作を追加するのは非常に簡単です。特定のツリーノードに新しい動作を追加するだけです。
ビヘイビアツリーの詳細については、ビヘイビアツリーの概要の記事を参照してください。
開発
すべてのコードはVisual Studioで作成されました。 Windowsでは、クリックの代わりにマウスクリックがあったメインのIrrlichtブランチを使用しました。 週に一度、Xcodeで現在のバージョンをコンパイルし、デバイスでテストしました。
VLDライブラリは、メモリリークの修正に大いに役立ちました。 このライブラリは、コード情報とともにメモリリーク情報を表示します。

結果
何が起こったかの短いビデオ: