我正在尝试为自己编写一个基于实体组件的小游戏框架。我刚刚遇到了我的基类系统的逻辑问题。
问题是我有两个东西,实体(可以包含其他实体和组件)和组件(它们附加到某个实体)。
所以我做了两个接口:
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:Entity 而不是 e:IEntity 的原因是因为我使用的是 this.addChild(v),它属于 DisplayObjectContainer。
希望这能解决我的问题。