Adobe AIRとStage3Dを使用した最初のAndroidゲームの開発

はじめに



私は長い間携帯電話用のおもちゃを作りたいと思っていました。 ゲーム開発は私の趣味の1つです。 私はこれにほとんど時間を割いていませんが、喜んでそれを行います。



私は、PC(友達や同僚と遊ぶなど)、ブラウザゲーム、ソーシャルネットワーク用のゲームで小さなおもちゃを開発していました。 この方向で特に目立ったことはしていませんが、楽しい時間を過ごしました。



そうそう、私はコンピューターゲームの開発者や出版社のプログラマーとしても働いていましたが、すぐに趣味が一つのことであり、大規模なゲーム開発会社で働くことは別のことだと気づきました。



私はモバイルデバイス向けのゲームを作ったことがないので、問題を研究し、開発と出版の両方を試し、一般的にすべてがそこにあるかどうかを調べることにしました。



技術の選択



Unityを2回インストールし、テストプロジェクトを作成しましたが、わかりません。このテクノロジーの魂に何か嘘はありません。すべてが私にとって不快であり、私はそれを完了しました。



私はsdl2とcocos2dを試しました-これらの技術がもっと好きでしたが、いくつかの面でエンジンの機能に制限がありました。



haxeを試してみました-非常に興味深いことですが、アプリケーションのビルドに時間がかかり、Android SDK / NDKを介したビルドに失敗することがよくあります(Android SDK / NDKリポジトリを操作するための開発環境がいくつかあり、haxeと競合する可能性があります)。 AIR用。



私はさまざまなエンジンで長い間いろいろと調べてみましたが、ある時点でプロセスのためにおもちゃをリリースすることにしました。 そこで私は昔の友人であるAIRテクノロジーを備えたAS3に目を向けました。 どういうわけか私は小さな無線操縦玩具を作り、リモートコントロールを使用する代わりに、単純なWI-FI制御ジョイスティックインターフェイスが開発された電話を使用しました。 Flashでおもちゃを作るのが常であったため、AIRを使用しました。AIRでモバイルアプリケーションを作成するのは非常に迅速かつ簡単でした。



Stage3d



ベクターアニメーションはこれまであまり優れたものではありませんでしたが、ごく少数のアニメーションで十分に機能します。 あなたはこのために深刻なおもちゃを作ることはありません。私は長い間、Stage3Dを通じてビデオカードを操作する方法を学びたいと思っていました。 また、ビットマップブリットを携帯電話でどのように動作させるかを試してみました-それほど悪くはありませんが、それは個人的な喜びのためであるため、Stage3Dをマスターすることにしました。



最初に、StarlingとGenome2Dに取り組みました。 Starlingは非常に便利であることが判明しましたが、パフォーマンスに関する私の期待に応えることができませんでした。さまざまな表示フィルターでアニメーションを使用する場合は、通常のDisplayListとMovieClipを使用することをお勧めします。 Genome2Dで作業して情報を検索するのは難しく、生産性はそれほど高くありません。 ソースを見ると、これらのエンジンがStage3D機能の非常に厳しい実装であることが明らかになりました。 Stage3D自体を見ることにしました。



Adobeの例に基づいて開発されたbunnymarkに触発されました-GPUSprite。 非常に多くのスプライトが画面上でジャンプしているので、すぐにどうなるかと思いました。



この小さなエンジン(GPUSprite)を見ました。 原則として、ほとんどすべてが幸福(カメラ、スプライト、回転、移動、スケーリング、透明度)に加えて、追加できるすべての機能を備えています。 アニメーション、いくつかのディスプレイフィルター、およびすべての機能の制御の例では、マロマルスキーエンジンに十分ではありませんでした。



それは少し見えるかもしれませんが、そうすることはそれほど簡単ではありません。 ビデオカードの操作原理から生じる問題がいくつかあります。 各スプライトにビデオカードオブジェクトを選択できますが、それほど高速ではないため、特定のスプライトにピクセルシェーダーを安全にオーバーレイし、スプライトの数を直線的に増やすことができます。 ビデオカードの1つのオブジェクトに複数のスプライトが保存されている場合、より多くのスプライトを表示できます。スプライトを長方形の形で表す場合、スプライトごとに4つの頂点が必要です。 ただし、ビデオカードオブジェクトの頂点の数には制限があり、限られた数のテクスチャ(スプライトシート)をスナップできます。 デバイスのより広いカバレッジに使用した設定では、オブジェクトごとに16384のスプライトが取得され、1つのテクスチャに制限されます。



表示するスプライトの深さによるソートも必要です。 これから、次の図が発生します。



•描画順にスプライトを整理します。

•最初のスプライトについて、ビデオカードオブジェクトを作成し、関連するスプライトシートをテクスチャの形式で添付します。

•次のスプライトを確認します。別のスプライトシートからのものである場合、オブジェクト内の16384スプライトの制限が満たされるか、表示効果のために別のピクセルシェーダーが必要になり、ビデオカード用の新しいオブジェクトを作成します。



このすべてのビジネスを管理するのは簡単ではなく、処理に時間がかかります。 しかし、別の方法でそれを行うことができます-スプライトシートをそのままテクスチャに変えずに、必要なスプライトで描画しながらテクスチャを作成します。これが欠点です。



私はさまざまな方法を試しましたが、それぞれに長所と短所がありました。 最後に、手動制御のためのほとんどすべての自動処理を削除しました。 使いにくいですが、効率は良いです。 それ以外の場合、スターリングのようなものはすべてパフォーマンスに含まれます。



フレームアニメーションとソフトウェア(ボーンアニメーション)、およびAdobe AnimateのMovieClipsをプログラムおよびフレームアニメーション用のスプリッツと記述ファイルに変換するための小さなプログラムをサポートしました。



その後、GUI要素に通常のステージを使用したかったのですが、速度が遅くなり、単純なGPUGUIエンジンとビットマップフォントへのコンバーターの開発に気を取られました。 テキストも一般に難しいです。 まれにしか変化しない単純なフレーズについては、BitmapDataでTextFieldをレンダリングすることにより、自動スプライトを生成しました。



結論



もちろん、できる限り楽しみました。 私は何十もの自転車をやったことがありますが、それは魅力的で、これはまだ趣味です。 Android上のStage3Dの動作機能にはまだいくつかの問題がありました。 たとえば、画面の水平方向で、ゲーム中に誰かが電話をかけた場合、ゲームに戻った後、白い画面が残るか、デフォルトの背景設定で選択した色がそのまま残ります。 さらに、目に見えないボタンを押したり、音を聞いたり、通常のステージが動作したり、すべてのアプリケーションコードが機能していても、何も表示されません。 この問題に関するインターネット上の記事があります。



Google Playでの公開も楽しいアクティビティです。すべてがロシア語で書かれているようですが、それほど簡単に理解できるものはなく、経験豊富な人々のサードパーティのWebサイトで説明を読むと便利です。 中国人は彼らのためにインターフェースを構成する可能性が高い。



これをすべてテストするために、単純なアーケードゲーム「Ancient Runes」を開発し、Google Playで公開しました。



私は他の趣味の世話をしながら、モバイル向けの小さなオンライングッズを開発することは興味深いです。



興味のある方は、スターリングのapkベンチマークの例(静的な画像のみをアニメーションに変更し、そこで何かを加速できるかもしれません)とアニメーション付きのAdobeのGPUSpriteエンジンの例



ムクドリ

GPUSprite



All Articles