Передача параметров конструктору для автоматически созданного класса активов AS3
-
22-08-2019 - |
Вопрос
Я создаю подкласс MovieClip (давайте назовем его MyClip
), который я хочу использовать для нескольких библиотечных ресурсов.Я буду создавать экземпляры этих видеоклипов из кода ActionScript. MyClip
имеет параметр конструктора, который позволяет ему устанавливать начальные значения определенных свойств.
Поскольку я хочу использовать его для нескольких библиотечных ресурсов, логичным способом сделать это, по-видимому, является указать его в текстовом поле "Базовый класс" в диалоговом окне "Свойства символа".Проблема в том, что автоматически сгенерированные подклассы не имеют конструктора с параметром.Вместо этого Flash пытается сгенерировать их только с помощью конструктора по умолчанию, что также завершается неудачей, потому что MyClip
не имеет конструктора по умолчанию.
Есть ли какой-нибудь способ обойти это, кроме переноса инициализации свойства на обычный метод?
Редактировать: Я выразился недостаточно ясно, я попытаюсь прояснить это здесь.Если это тот MyClip
класс:
public class MyClip extends MovieClip
{
private var someValue : Number;
public function MyClip(someValue : Number)
{
this.someValue = someValue;
}
}
и я уточнил MyClip
в качестве базового класса для symbol MyClipA в библиотеке я бы в идеале хотел иметь возможность делать clip = new MyClipA(17);
без необходимости писать MyClipA
класс самого себя.
Решение
Я предполагаю, что причина, по которой вам нужно создать классы MyClipA и MYClipB и т.д., заключается в том, чтобы прикреплять разные рисунки к объектам, которые просто имеют поведение объекта MyClip?
Может быть, вы могли бы подойти к этому по-другому, сделайте свой базовый класс - MyClip таким, какой у вас есть, в качестве примера, примите 2 aruguments, один из которых является ссылкой на art:
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, который применяется к каждому из этих объектов библиотеки изображений.
Другие советы
Я не думаю, что это действительно можно сделать.Но если это можно сделать, то это будет правильно сделано с прототипом.Возможно, вы можете изменить конструктор каждого из классов по умолчанию.
Попробуйте указать аргументы по умолчанию для конструктора (null
может быть, как особая ценность?).Затем добавьте немного проверки ошибок в начале конструктора, который устанавливает разумные значения по умолчанию для вашего видеоролика.Это действительно халтурно, но, насколько я знаю, нет лучшего способа сделать это с помощью анимирующего пользовательского интерфейса drag & drop (вы можете сделать это только с помощью кода).
Если бы тоже столкнулся с этим.Правильный способ решить эту проблему - создать классы для MyClipA и MyClipB, которые наследуются от MyClip.Это может быть громоздким, если существует много классов, основанных на MyClip.С другой стороны, если это так, вы, возможно, захотите начать думать об использовании композиции вместо наследования в любом случае.