繁体   English   中英

AS3使用基类对象来创建扩展类的实例

[英]AS3 using base class object to create instance of extended class

我有一个扩展MovieClip的自定义类。 这个想法是它允许存储有关MovieClip额外变量和信息。

public class MapObject extends MovieClip
{
    private var cellX:int;
    private var cellY:int;

    public function MapObject()
    {
    }
 }

我有几个在运行时加载的MovieClips (.swf文件)。 问题是,如何让这些MovieClip对象实际成为MapObject对象?

我试过了 :

var mapObject:MapObject = myMovieClip as MapObject;

但它给出了null

PS。 我知道你可以动态地向MovieClip添加变量,但我真的不想这样做。

您无法在不更改代码的情况下更改类层次结构。 您必须在每个类定义中将父类更改为MapObject而不是MovieClip

有一个简单而干净的解决方案,包括使用装饰器:

public class MapObject {

    private var mc:MovieClip;
    private var cellX:int;
    private var cellY:int;

    public class MapObject(mc:MovieClip) {
        this.mc = mc;
    }

    public function get movieClip():MovieClip {
        return mc;
    }
}
...

var wrapper:MapObject = new MapObject(new MyMovieClip());
...

container.addChild(wrapper.movieClip);

它是一个包装器,它接受另一个类的实例(在你的情况下是MovieClip)来添加功能。 它非常强大,因为您无需在更改MapObject时更改每个子类。 这个原则被称为组合而不是继承

在您的情况下, MovieClip所有方法和属性都是公共的,因此您只需编写mc.play()而不是this.play()

查看有关Decorator设计模式详细信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM