![](https://habrastorage.org/files/42c/217/827/42c217827ee945bc8259d563c24615bd.png)
背景
ある晴れた日、Debian Linuxが私のマシンで実行されていて、構成ファイルのディレクトリの広がりを耕し、同時に神経細胞を破壊し、そのアイデアが思い浮かびました。 視力の悪い悪者にふさわしいので、私はゲームをしてリラックスすることにしました。 Funny Boatゲームのスクリーンショットを見るとすぐに、Androidでクローンにする必要があることに気付きました。
面白いボートゲームのスクリーンショット
![画像](https://habrastorage.org/files/96f/d4c/749/96fd4c74997a461589cc9528282a388b.png)
開発
ほぼすぐに、ゲームの開発が始まりました。 ゲームエンジンとして、私はAndEngine(java言語)を選択しました。これは、それを扱った経験があるため、当時まだ流行していました。 プロジェクトは、「 Light Rabbit 」という技術名を得ました。 一週間後、私は最も単純なプロトタイプを手に入れました。 私は独立してグラフィックを描き、コードを書きましたが、それに関連して最初の結果が怖くなりました。 また、水と波の表示に問題がありましたが、これは1〜2日で決定されました。
プロトタイプ01
![](https://habrastorage.org/files/a64/854/3f9/a648543f9ff64191bfe8764c022c357d.png)
ゲームのアーキテクチャは、「シーン」(Sceneクラス)の使用とそれらのツリー構造に基づいています。 これは、AndEngineで最も便利なコード区分ツールです。 シーンは本質的にツリーの頂点の1つであり、親と多くの子孫を持ち、描画オブジェクトを追加してイベントを処理できるメソッドがあります。 実践が示しているように、アプリケーションのすべてのメインシーンが接続されているルートシーンを用意すると便利です。 ルートシーンは一種のマネージャーであり、個々のシーンの依存関係と機能を考慮して、シーンを簡単に切り替えることができます。 ルートシーンから、すべてのイベント(たとえば、画面をクリックする)がダウンストリームの「接続された」シーンに送信されます。
ゲーム内のシーンの階層
![](https://habrastorage.org/files/5cd/a9f/1c2/5cda9f1c29a64e22ac5412539255b705.png)
実際、これを止めて、すべてを整理し、メニューを追加し、コインと評価を取得する必要がありました。 しかし、私は停止しませんでした。
昼と夜の変更を追加しました(そして天気も!)。
![](https://habrastorage.org/files/c24/c8a/9f1/c24c8a9f100642e9bc826b14d559495b.png)
![](https://habrastorage.org/files/537/400/b96/537400b96b3642db92221df5ec76536f.jpg)
プリミティブAI、強度、およびその他の特性を持つユニットのシステムを追加しました。 そして、ヘリコプター(そして、なぜですか?)。 ユニットの「フレンドリーファイア」モードは、世界の知覚パラメーター(ニュートラル、パイレーツ、インペリアル、アリー、すべての敵など)を使用して調整されました。
![](https://habrastorage.org/files/158/a78/0be/158a780be08245eea5571b3a3fbbaded.jpg)
![](https://habrastorage.org/files/2e2/f76/76b/2e2f7676b7a1433bb58030f180ff90e1.jpg)
対話システムを追加しました。
![](https://habrastorage.org/files/d40/180/453/d40180453b404cc9b5de1e4fb846f5c8.jpg)
最後のポイントにより、私はもう1年(!) ゲームのアーキテクチャを真剣に変更し、XML形式に基づいて独自のコマンドとスクリプトの言語を作成する必要がありました。 私はこの期間に別のゲームをリリースすることさえできました。
レベル2のシナリオの抜粋
<!DOCTYPE LRLevel> <Level> <Setting> <Chapter> </Chapter> <Name></Name> <Zone>SEA</Zone> <Weather>FAIR</Weather> <DialogBase>DialogBases/level_01.lrdb</DialogBase> <Fog colorR="20" colorG="20" colorB="20" colorA="255"/> </Setting> <Events> <Event command="SET_WATER_WAVE_HEIGHT" arg_int="30"/> <Event command="SET_WATER_WAVE_REPEATING" arg_int="20"/> <Event command="SET_TIME" arg_int="6"/> <Event command="STOP_TIME_IN" arg_int="21"/> <Event command="UNIT_ADD" id="0" arg_int="-600" arg_str="SteamShip" arg_str2="RIGHT"/> <Event command="UNIT_SET_PROJECTILES_COUNT" id="0" arg_int="32"/> <Event command="SET_DIE_POSITION" arg_int="-100"/> <Event command="UNIT_SET_POSITION" id="0" arg_int="200"/> <Event command="SET_FOG_VISIBLE" arg_int="0"/> <Event command="WAIT_SECONDS" arg_int="2"/> <Event command="SHOW_REPLIC" id="1" arg_int="2"/> ...
もちろん、この形式でスクリプトを作成するには、エディターが必要でしたが、エディターはまったく存在しませんでした。 試みはありましたが、作業量が非常に増えたため、2年後にリリースを計画し始めました。
コマンドはスクリプトファイルから読み取られ、順次実行されます。 条件付きステートメントを追加したかったのですが、それなしでもできました。
エージェント
単純なコマンドシーケンスでは十分ではなかったため、「エージェント」のようなものを思いつきました。 エージェントはチームによって作成され、ユニットに割り当てられ、コマンド実行のメインフローを遅延させずに、条件の実行を監視します。 条件が満たされると、エージェントはアクションを実行して自己破壊します。
エージェントの例を挙げます。
- 特定の位置に到達したユニットを殺す
- ユニットの動作の変更(特定のポイントでの動きの停止など)
転記
かなりの期間の後、チュートリアルを含めて11の異なるレベルにまで及ぶ、ほとんど接続されていないスクリプトを手に入れました。 私は、開発と公開を開始する時だと判断しました。
地元の住民の指示に従って、私はウェブサイトslide.meとw3bsit3-dns.com、そしてもちろんグーグルプレイマーケットで出版物を作りました。 私の分析と、slide.meに表示されるダウンロード数(約400回のダウンロード)を考えると、まとめか、ユーザーの電話からデータを受信できないことについて結論を下します。 私のデータによると、slide.meからのインストールは5つ未満です。
庭の石w3bsit3-dns.com
フォーラムスレッドw3bsit3-dns.comに投稿した後、私のトピックは最初のページで約2日間停滞しましたが、その後、理由もなく単純に消えました。 ただし、これにより10回のインストールが発生しました。
分析と組み込み広告
最初の経験として、分析と控えめなバナー広告さえもゲームに組み込まれました。 AndEngineエンジンを使用するゲーム開発者にとって、たとえばUnityユーザーとは異なり、広告の埋め込みは完全に簡単な作業ではありません。
また、アクショントラッキングと分析の機能に感銘を受けました。 インターネットを使用すると、ゲーム内の任意のボタンをクリックすること、通過したレベルと終了したレベルの数(友人がハードコアに不満を抱いている)について知ることができます。
繰り返しますが、 分析は小さなアプリケーションでも非常に便利です。
クレイジーマネー
広告ユニットからほぼ30セントを稼ぐことができました。 私はグラフィックスさえ与えません。
AndEngineによる
AndEngineは、優れたアクションの自由を提供する優れた2Dゲームエンジンです。 開いているため、コードで簡単に拡張できます。 多数の例があり、Box2D物理学を接続したり、グラフィックにシェーダーを使用したりできます。 その人々を使用しているかなり大きなコミュニティがあります。 ただし、時代遅れになった(非推奨ではないことも珍しくありません)、開発が停止した(1年に1.5回のコミットは考慮されていない)、今後数年間の運命が慣れ親しみと小さなゲームのエンジンであると感じています。 少なくともLibGDXにとどまり、おそらくより高いレベルに移行することはお勧めしません。
ソースコードとほとんどのリソース
これは、この規模の私の最初の完成プロジェクトです。 もう更新されません。 そこで良いコードを探してはいけませんが、いくつかの実装ポイント(例えば、AndEngineのwaterクラス)が役に立つかもしれません。
コード(Bitbucket)を使用してリポジトリにリンクします 。
ここでそれを感じることができます-Google Play 。
おわりに
多くの人にゲームをプレイしてもらい、シンプルにしたり、トレンドを分析したり、明確な計画なしに開発に突入したりせずに、最後にアーティストを雇ってもらいたい場合。
自分でゲームを作成する場合は、好きなことをしてください。