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

Flash 如何实例化功能相似/相同但属性不同的对象?,flash,actionscript-3,Flash,Actionscript 3,AS3新手,长期程序员。本质上,我正在创建无数的对象,所有这些对象都将具有相同的功能,尽管每个对象的属性都会有所不同,包括艺术品。我相信他们都是电影嘴唇,因为他们将是互动的,我相信他们将是移动的 我想知道创建这些对象的最佳方法是什么。我假设我创建了一个具有功能和属性的对象类,我只是不确定如何实例化具有不同属性的多个副本,若这有意义的话 对不起,我的措词不好,如果有必要,我可以帮助详细说明,并提前感谢您的帮助!:) 在AS3中,对象类在其修饰符中标记为动态,随后您可以动态地向其添加任何属性。同样,

AS3新手,长期程序员。本质上,我正在创建无数的对象,所有这些对象都将具有相同的功能,尽管每个对象的属性都会有所不同,包括艺术品。我相信他们都是电影嘴唇,因为他们将是互动的,我相信他们将是移动的

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


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

在AS3中,对象类在其修饰符中标记为动态,随后您可以动态地向其添加任何属性。同样,您也可以创建自己的类并将其标记为动态的,然后动态地向它们添加属性。。。为了正确地评估如何使用这些属性(尽管可能不值得这么复杂),最好为不同类型的对象创建不同的类。如果它们共享一些基本功能,那么您可以从创建基类开始,并为每个特定类型的对象扩展它

在此处阅读有关动态关键字的更多信息:

然而,正如我在上面所说的,我认为扩展可能是一种更好的方法来实现您想要做的事情。。。此外,我大力提倡使用Flex框架来简化AS3的使用,不管怎样,我更倾向于使用AS3进行OOP:


让我知道这是否有帮助,或者您正在寻找其他内容。

在AS3中,对象类在其修饰符中标记为动态,随后您可以动态向其添加任何想要的属性。同样,您也可以创建自己的类并将其标记为动态的,然后动态地向它们添加属性。。。为了正确地评估如何使用这些属性(尽管可能不值得这么复杂),最好为不同类型的对象创建不同的类。如果它们共享一些基本功能,那么您可以从创建基类开始,并为每个特定类型的对象扩展它

在此处阅读有关动态关键字的更多信息:

然而,正如我在上面所说的,我认为扩展可能是一种更好的方法来实现您想要做的事情。。。此外,我大力提倡使用Flex框架来简化AS3的使用,不管怎样,我更倾向于使用AS3进行OOP:

让我知道这是否有用,或者您正在寻找其他内容。

创建一个类

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,也可以将属性声明为public

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();
        }
    }
}
创建一个类

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,也可以将属性声明为public

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();
        }
    }
}

值得注意的是,动态类和对象为编译器创建的工作要比定义了属性和方法的自定义类多得多,因此应该尽量少用。@shaunhusain感谢您的感叹。这个项目将成为一个facebook应用程序,是一个游戏。我不太清楚你所说的指向其他主权财富基金的状态存储URL是什么意思。我可以看到每个级别都是一个单独的SWF。如果我将图像/艺术品存储在数据库中,我将如何将艺术品附加到对象实例?@PaleAilment,很抱歉,我无法响应,因为工作太多了。我的标点符号和语法不是最好的。我的意思是,您可以使用DB存储SWF或图像文件(如果不是动画)的位置,并在运行时使用SWFLoader对象加载数据,而不是将所有内容都包含在原始SWF文件中。基本上,关键是你可以拥有一个可以动态加载其他swf的swf。@PaleAilment如果你不熟悉如何设置它,请参阅本文和我回答中的注释,以获取有关设置和使用PHP和MySQL的教程的链接。你也可以这样做,但要基于“artWorkId”存储URL或类似性质的东西,并使用SWFLoader的实例来.load()加载与所述艺术品相关的url。@shaunhusain请不要道歉,因为你帮了大忙!!我将在这里调查您的答复,因为这似乎更符合我的需要。:)再次感谢你!值得注意的是,动态类和对象为编译器创建的工作要比定义了属性和方法的自定义类多得多,因此应该尽量少用。@shaunhusain感谢您的感叹。这个项目将成为一个facebook应用程序,是一个游戏。我不太清楚你所说的指向其他主权财富基金的状态存储URL是什么意思。我可以看到每个级别都是一个单独的SWF。如果我将图像/艺术品存储在数据库中,我将如何将艺术品附加到对象实例?@PaleAilment,很抱歉,我无法响应,因为工作太多了。我的标点符号和语法不是最好的。我的意思是,您可以使用DB存储SWF或图像文件(如果不是动画)的位置,并在运行时使用SWFLoader对象加载数据,而不是将所有内容都包含在原始SWF文件中。基本上,关键是你可以拥有一个可以动态加载其他swf的swf。@PaleAilment如果你不熟悉如何设置它,请参阅本文和我回答中的注释,以获取有关设置和使用PHP和MySQL的教程的链接。你也可以这样做,但要基于“artWorkId”存储URL或类似性质的东西,并使用SWFLoader的实例来.load()加载与所述艺术品相关联的url。@shaunhusain请不要道歉,因为你已经