如何实例化具有相似/相同功能但属性不同的对象?

时间:2011-08-25 05:08:39

标签: flash actionscript-3

AS3的新手,长期的程序员。基本上我创建了无数的对象,所有对象都具有相同的功能,尽管每个对象(包括艺术作品)之间的属性会有所不同。我相信他们都会成为影片剪辑,因为他们会互动,我相信他们会感动。

我想知道创建这些对象的最佳方法是什么。我假设我创建了一个具有功能和属性的对象类,我只是不确定如何实例化具有不同属性的多个副本,如果这是有道理的。

对不起我的措辞不好,如有必要,我可以帮忙详细说明,并提前感谢您的帮助! :)

2 个答案:

答案 0 :(得分:3)

创建一个类。

package {
    import flash.display.MovieClip;

    public class MyMovieClip extends MovieClip {
    }
}

添加可能不同的属性。

package {
    import flash.display.DisplayObject;
    import flash.display.MovieClip;

    public class MyMovieClip extends MovieClip {
        private var _borderColor : uint;
        private var _artWork : DisplayObject;
    }
}

添加修改属性的可能性。您可以使用构造函数参数或显式getter / setter,也可以将属性声明为公共属性。

package {
    import flash.display.DisplayObject;
    import flash.display.MovieClip;

    public class MyMovieClip extends MovieClip {
        private var _borderColor : uint;
        private var _artWork : DisplayObject;

        // using constructor parameters

        public function MyMovieClip(borderColor : uint, artWork : DisplayObject) {
            _borderColor = borderColor;
            _artWork = artWork;
        }

        // using setter/getter

        public function set borderColor(borderColor : uint) : void {
            _borderColor = borderColor;
        }

        public function get borderColor() : uint {
            return _borderColor;
        }

        public function set artWork(artWork : DisplayObject) : void {
            _artWork = artWork;
        }
        public function get artWork() : DisplayObject {
            return _artWork;
        }

    }
}

创建类的实例并使用不同的值设置它们:

package  {
    import flash.display.Shape;
    import flash.display.Sprite;

    public class Main extends Sprite {
        public function Main() {
            var myMc1 : MyMovieClip = new MyMovieClip(0xFF0000, new Shape());
            var myMc2 : MyMovieClip = new MyMovieClip(0x0000FF, new Shape());
            var myMc3 : MyMovieClip = new MyMovieClip(0x00FF00, new Shape());

            myMc1.borderColor = 0xFF0000;
            myMc3.artWork = new Shape();
        }
    }
}

答案 1 :(得分:1)

在AS3中,Object类在其修饰符中标记为动态,随后您可以动态添加您想要的任何属性。此外,类似地,您可以创建自己的类并将其标记为动态,然后动态添加属性...为了正确评估如何使用这些属性虽然可能不值得复杂化,而是最好做出不同的不同类型对象的类。如果它们共享一些基本功能,那么您可以先创建一个基类并为每个特定类型的对象扩展它。

在此处详细了解动态关键字: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/statements.html?filter_flash=cs5&filter_flashplayer=10.2&filter_air=2.6#dynamic

然而,正如我上面所说,我认为扩展可能是一种更好的方法来实现你想要做的事情......而且我是使用Flex框架使AS3更容易使用的一个主要倡导者,无论如何更多OOP与AS3在这里: http://www.adobe.com/devnet/actionscript/articles/oop_as3.html

请告诉我这是否有帮助,或者您正在寻找其他内容。