私は、エンティティ コンポーネント ベースの小さなゲーム フレームワークを自分で書こうとしています。基本クラス システムでロジックの問題が発生しました。
問題は、エンティティ (他のエンティティとコンポーネントを含むことができる) とコンポーネント (特定のエンティティにアタッチされている) の 2 つがあることです。
だから私は2つのインターフェースを作りました:
interface IEntity
interface IComponent
そして、それぞれの抽象クラスを作成しました
public class Component implements IComponent
public class Entity extends Sprite implements IEntity, IComponent
問題は、IEntity インターフェイスに関数があることです。
function addComponent( e:Entity )
引数のタイプ i Entity の理由は、Component で Sprite から継承するエンティティ関数を参照する必要があるためです (IEntity タイプではそれを行うことができません)。
しかし、Flash Develop ではエラーとして扱われているようです (Entity クラスでのこの関数の実装)。私は何か間違ったことをしていますか?
編集 :
これはインターフェイスです:
public interface IComponent
{
function get parentGameObject() : IEntity;
function set parentGameObject( v:IEntity ) : void;
function init() : void;
function dispose() : void;
}
public interface IEntity
{
function addComponent( c:IComponent ) : IComponent;
function removeComponent( c:IComponent ) : Boolean;
function getComponent( type:Class ) : IComponent;
function hasComponentOfType( type:Class ) : Boolean;
function addGameObject( child:Entity ) : void;
}
次に、私の抽象エンティティ クラスは、このインターフェイスの両方を実装し、DisplayObjectContainer から拡張します。これは、各エンティティがそれ自体とその子エンティティをレンダリングする機能を必要とするためです。
問題はそれです :
public function addGameObject( e:Entity ) : void {
m_components.push( v );
this.addChild( v );
v.gameObject = this;
v.init();
}
無効のようで、エラーは次のとおりです。インターフェイス IEntity のインターフェイス メソッド addGameObject は、クラス Entity の互換性のないシグネチャで実装されています。
また、e:IEntity ではなく e:Entity を使用する理由は、DisplayObjectContainer に属する this.addChild( v ) を使用しているためです。
それが私の質問をクリアすることを願っています。