1

Я создаю подкласс MovieClip (назовем его MyClip), который я хочу использовать для нескольких активов библиотеки. Я буду создавать эти клипы из кода ActionScript. MyClip имеет параметр конструктора, который позволяет ему устанавливать начальные значения определенных свойств.Передача параметров конструктору для класса созданных автоматически AS3 классов

Поскольку я хочу использовать его для нескольких ресурсов библиотеки, логический способ сделать это, похоже, указать его в текстовом поле «Базовый класс» в диалоговом окне «Свойства символа». Проблема в том, что в автогенерируемых подклассах нет конструктора с параметром. Вместо этого Flash пытается сгенерировать их только с помощью конструктора по умолчанию, что также не выполняется, потому что MyClip не имеет конструктора по умолчанию.

Есть ли какой-либо путь вокруг этого, кроме отсрочки инициализации свойств до нормального метода?

Редактировать: Я не был достаточно ясен, я попытаюсь разъяснить здесь. Если это MyClip класс:

public class MyClip extends MovieClip 
{ 
    private var someValue : Number; 

    public function MyClip(someValue : Number) 
    { 
     this.someValue = someValue; 
    } 
} 

и я указал MyClip в качестве базового класса для символа MyClipA в библиотеке, я бы в идеале хотел бы быть в состоянии сделать clip = new MyClipA(17); без писать тот MyClipA класс сам.

+0

Вы нашли решение? –

+0

Nope. Этого действительно не существует. Если это ситуация, с которой вы столкнулись, тогда лучше всего отложить инициализацию до нормального метода или переструктурировать классы, как предложено ниже. –

ответ

1

Я предполагаю, что вам необходимо создать классы MyClipA и MYClipB и т. Д., Чтобы прикрепить различные предметы искусства к объектам, которые имеют только поведение объекта MyClip?

Может быть, вы могли бы подойти к нему по-другому, сделать базовый класс - MyClip, как у вас есть это ваш пример, принимать 2 aruguments, один из которых является ссылкой на искусство:

public class MyClip extends MovieClip 
{ 
    public var art:ArtBaseClass 
    private var someValue : Number; 

    public function MyClip(someValue : Number, artClass:ArtBaseClass) 
    { 
     this.someValue = someValue; 
     this.art = new artClass(); 
     this.addChild(art); 
    } 
} 

И вы можете определить любой иначе вам понадобится ArtBaseClass, который применяется к каждому из этих объектов библиотеки искусства.

0

Попробуйте указать аргументы по умолчанию для конструктора (null как специальное значение, возможно?). Затем добавьте немного проверки ошибок в начале конструктора, который устанавливает разумные значения по умолчанию для вашего MovieClip. Это действительно взломано, но насколько я знаю, нет лучшего способа сделать это, используя drag & drop animating UI (вы можете делать это только через код).

+0

Это будет работать, если бы мне не нужен этот параметр. Как бы то ни было, мне, вероятно, придется оставить класс с конструктором по умолчанию и реализовать метод «initialize» для инициализации после создания объекта. Который сосет;) –

0

Если вы столкнулись с этим. Правильный способ его решения - создать классы для MyClipA и MyClipB, которые наследуются от MyClip. Это может быть громоздким, если есть много классов, основанных на MyClip. Опять же, если это так, вы можете вообще подумать об использовании композиции, а не наследования.

1

Я не думаю, что это действительно можно сделать. Но если это можно сделать, это будет правильно с прототипом. Возможно, вы можете изменить конструктор каждого из классов по умолчанию.

 Смежные вопросы

  • Нет связанных вопросов^_^