接口也是显示对象

时间:2011-11-16 17:30:32

标签: actionscript-3

我有一些实现接口的类,但也扩展了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);
        }
    }
}

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

现在我知道我已经看过一个类扩展了MovieClip / Sprite并实现了一个接口的例子......我该怎样做才能使它能够为舞台添加“状态”但是还能实现我想要的方法? ?

2 个答案:

答案 0 :(得分:5)

简单演员应该在大部分时间内完成:

addChild(state as DisplayObject);

编译器会引发该错误,否则因为它不假设IState总是由DisplayObject的某些东西实现,但如果你可以保证这个条件你总是可以强制转换。

答案 1 :(得分:2)

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

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

它在Sprite或MovieClip中的实现看起来像这样:

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

当IState接口扩展IDisplayable时,可以使用addChild(state.displayObject);将IState对象添加到舞台上。