Actionscript 3 同时也是显示对象的接口

Actionscript 3 同时也是显示对象的接口,actionscript-3,Actionscript 3,我有一些实现接口的类,但也扩展了Sprite类: package { public interface IState { function addMonster():void; } } package { public class Fuzzy extends Sprite implements IState { public function addMonster():void { } } } package

我有一些实现接口的类,但也扩展了Sprite类:

package {
    public interface IState {
        function addMonster():void;
    }
}

package {
    public class Fuzzy extends Sprite implements IState {
        public function addMonster():void {

        }
    }
}

package {
    public class LizardSkin extends Sprite implements IState {
        public function addMonster():void {

        }
    }
}

// Document class 

package {
    public class Main extends MovieClip {
        private var state:IState;
        public function Main():void {
            state = new Fuzzy();

            addChild(state);
        }
    }
}
当我尝试添加child(state)时,我不断收到一条错误消息1067:将IState类型的值隐式强制转换为不相关的flash类型。display:DisplayObject


现在我知道我已经看到了一些例子,其中一个类扩展了MovieClip/Sprite并实现了一个接口……我可以做些什么来实现它,这样我就可以在舞台上添加“状态”,同时也实现我想要的方法???

一个简单的演员应该在大多数情况下做到这一点:

addChild(state as DisplayObject);

编译器会以其他方式引发该错误,因为它不会假定
IState
始终由
DisplayObject
的某个对象实现,但如果您可以保证始终可以强制转换该条件。

简单强制转换在大多数情况下都可以执行:

addChild(state as DisplayObject);

编译器以其他方式引发该错误,因为它不会假定
IState
总是由
DisplayObject
的某个对象实现,但如果您可以保证始终可以强制转换该条件。

在这种情况下,我所做的是使用IDisplayable接口,如下所示:

public interface IDisplayable
{
   function get displayObject():DisplayObject;
}
public function get displayObject():DisplayObject
{
     return this;
}
它在Sprite或MovieClip中的实现如下所示:

public interface IDisplayable
{
   function get displayObject():DisplayObject;
}
public function get displayObject():DisplayObject
{
     return this;
}

然后可以使用
addChild(state.displayObject)将IState对象添加到stage中,当您的IState接口扩展IDisplayable时。

在这种情况下,我所做的是使用IDisplayable接口,如下所示:

public interface IDisplayable
{
   function get displayObject():DisplayObject;
}
public function get displayObject():DisplayObject
{
     return this;
}
它在Sprite或MovieClip中的实现如下所示:

public interface IDisplayable
{
   function get displayObject():DisplayObject;
}
public function get displayObject():DisplayObject
{
     return this;
}

然后可以使用
addChild(state.displayObject)将IState对象添加到stage中,当您的IState界面扩展IDisplayable时。

感谢这一帮助。我想我必须编写一个完整的抽象类来实现这个接口。谢谢,这帮了大忙。我想我必须编写一个完整的抽象类来实现接口。我也使用这个方法。另一个好处是,您可以让类成为DisplayObject的“参与者”,而不是强制自己的类扩展DisplayObject。如果编码正确,“处理程序”不会注意到这两种情况之间的差异。我也使用这种方法。另一个好处是,您可以让类成为DisplayObject的“参与者”,而不是强制自己的类扩展DisplayObject。如果编码正确,“处理程序”不会注意到这两种情况之间的差异。