継承の何が問題になっていますか? PushButton Engineフレームワークを使用したFlashゲーム開発

画像
フラッシュゲームの開発を加速する特殊なフレームワークは多くありません。 聞いているもののうち、次のことに注意することができます。

フリクセル
フラッシュパンク
シトラスエンジン
押しボタンエンジン

この投稿では、 PushButton Engineと呼ばれる有望なオープンソースエンジンに仲間のフラッシャーの注目を集めたいと思います。 insidefacebook.comによると、PBEはすでにAdobe Max 2010でプレゼンテーションを行い、その上で開発を行っています。 Zynga、Playdom、Hive7などの企業がゲーム開発に使用しています。

エンジンの開発者は、The Incredible Machines、Tribes、Torqueなどのゲームを作成したゲーム開発界の有名な人々です。

好奇心の強いコンポーネント開発アプローチが提案されており、著者によると、従来のオブジェクト指向よりもゲーム開発においてはるかに便利で生産的です。

エンジンの機能の一部:
残念なことに、ドキュメントのある状況は望まれるものが多く残されています(ロシア語には、Comrade Flashistの努力によって翻訳されたいくつかの公式レッスンを除き、情報はまったくありません)。 ここにあります:

レッスン1
レッスン2
レッスン3
レッスン4

さて、状況を修正します。 この入門記事では、PushButton Engineの開発者がコンポーネントアプローチを実証する方法、コンポーネントとは何か、それらを使用する方法と理由について説明します。

継承の何が問題になっていますか?


常にオブジェクト指向がうまく機能するとは限りません。 ゲームを開発するとき、以下に説明するような状況がしばしば発生します。
プレーヤーを表すクラスを作成するとします。

画像

次に、Subjectクラスを追加し、親クラスのGame Entityに一般的な機能を配置します。

画像

ゲームは成長しており、クラス階層の複雑さも増していますが、これまでのところすべてが順調に見えます。

画像

しかし、遅かれ早かれ、不愉快な疑問が生じ始めます。 たとえば、Moving Itemクラスの継承元、Objectクラス、またはCan Moveクラスからですか。

画像

多くの場合、選択するオプションに関係なく、相続人によって呼び出される多くの異なるメソッドを持つ過度に肥大化した基本クラスになります。

画像

コードのデバッグ、修正、保守が困難になります。

どのソリューションが提案されていますか?


この状況での解決策は、ゲームを必要なコンポーネントで満たされた論理エンティティに分割するという構図です。 たとえば、Player、Enemy、およびItemという3つのエンティティがあります。

画像

コンポーネントを使用して、コンストラクタとしてエンティティを形成します:

画像

このアプローチにより、コードはより理解しやすく、論理的になり、作成されたコンポーネントは他のゲームで再利用できます。
このアプローチは継承をキャンセルしませんが、たとえばコンポーネントの階層など、本当に適している場合に使用されます。

画像

PushButton Engineでのコンポーネントアプローチの実装方法


コンポーネントを作成するためのコードはパッケージにあります

com.pblabs.engine.entity.*

エンティティは、 IEntityインターフェイスを実装するEntityタイプの軽量コンテナです。 作成するには、ファクトリーメソッドallocateEntity使用します。

var myEntity:IEntity = PBE.allocateEntity();

作成されたエンティティを初期化して、後でコード内の任意の場所で見つけることができる名前を付けます。

myEntity.initialize("MyEntity");

できた フレームワーク自体によって提供されるか、または自己作成された必要なコンポーネントでそれを埋めるために残ります。
コンポーネントは、 EntityComponentクラスまたはその子孫から継承して、直接または間接的にIEntityComponentインターフェイスを常に実装する必要があります。

画像

コンポーネントインスタンスを作成して構成しaddComponentaddComponentメソッドを使用してエンティティに追加します。

myEntity.addComponent(myComponent, "MyComponent");

お気づきのとおり、各エンティティまたはコンポーネントには文字列名が割り当てられています。 これは、コード内の任意の場所で特別なルックアップメソッドを使用して取得できるようにするために必要です。

PBE.lookupEntity
PBE.lookupComponentByName


これで、PushButton Engineに関する入門記事が終了し、次の記事ではフレームワークの内部アーキテクチャに焦点を当てます。

Source: https://habr.com/ru/post/J114672/


All Articles