我有一些实现接口的类,但也扩展了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并实现了一个接口的例子......我该怎样做才能使它能够为舞台添加“状态”但是还能实现我想要的方法? ?
答案 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对象添加到舞台上。