Конструктор - это то, о чем вы думаете, когда говорите «запустите, как только инициализируете его».
Конструктор использует то же имя, что и класс, например:
public class Pants extends MovieClip
{
public function Pants()
{
trace('hello');
}
}
Теперь, если мы сделаем:
var p:Pants = new Pants();
Этот код будет также запущен:
trace('hello');
Функция init()
- это пользовательская функция, которую люди могут использовать в качестве асинхронного конструктора (т. Е. Функцию, которую вы можете вызывать после определения других переменных и т. Д.).
public class Pants extends MovieClip
{
public var str:String;
public function init():void
{
trace(str);
}
}
И тогда это проследит «некоторую строку»:
var p:Pants = new Pants();
p.str = "some string";
p.init();
Лично я использую свою собственную функцию init()
в установщике базового класса для своих объектов приложения, например:
public class Pants extends MovieClip
{
private var _core:ApplicationCore;
private function _init():void
{
trace("application core is: " + _core);
}
public function set core(ac:ApplicationCore):void
{
_core = ac;
_init();
}
public function get core():ApplicationCore{ return _core; }
}
Тогда я могу сделать это:
var appCore:ApplicationCore = new ApplicationCore();
var p:Pants = new Pants();
p.core = appCore;
Который будет запускать мою функцию init()
только после того, как я определю ядро приложения.
Что касается вашего вопроса о различных типах классов - цель состоит в том, чтобы использовать наиболее примитивную форму класса из возможных.
Если вам нужна простая графика, которую вы можете перемещать по экрану, используйте Shape
. Если вы хотите определить более сложную графику, используйте Sprite
. Если вы хотите иметь анимацию на временной шкале, используйте MovieClip
.
По сути, нет необходимости создавать MovieClip, когда все, что вы хотите сделать, это создать синий квадрат, но вам нужно будет использовать MovieClip или Sprite, если вы хотите добавить к нему другие объекты DisplayObject.