【发布时间】:2013-09-02 09:37:23
【问题描述】:
我正在尝试为自己编写一个基于实体组件的小游戏框架。我刚刚遇到了我的基类系统的逻辑问题。
问题是我有两个东西,实体(可以包含其他实体和组件)和组件(它们附加到某个实体)。
于是我做了两个接口:
interface IEntity
interface IComponent
我为每个类做了一个抽象类
public class Component implements IComponent
public class Entity extends Sprite implements IEntity, IComponent
问题是在 IEntity 接口中我有一个函数:
function addComponent( e:Entity )
参数类型 i Entity 的原因是因为在组件中我需要引用它从 Sprite 继承的实体函数(我不能用 IEntity 类型这样做)。
但似乎 Flash Develop 将其视为错误(在实体类中实现此功能)。我做错了吗?
编辑:
这是接口:
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。
希望这能解决我的问题。
【问题讨论】:
-
如果您收到错误,请发布确切的错误信息!您还确定您的设置看起来像您描述的那样吗?这听起来有点奇怪,你在谈论
Entity中的一个函数,然后你正在切换到“然后在组件中我需要引用实体”,Entity也是IEntity和IComponent的混合体,现在我终于对你到底在哪里做什么感到困惑。 -
是的,我的帖子有点乱,我下班后会发布更多代码
-
我更新了我的帖子,希望现在更清楚
-
是的,现在看起来完全不同了:)
标签: actionscript-3 oop components starling-framework