Передача параметров конструктору для автоматически созданного класса активов AS3

StackOverflow https://stackoverflow.com/questions/680019

Вопрос

Я создаю подкласс 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.С другой стороны, если это так, вы, возможно, захотите начать думать об использовании композиции вместо наследования в любом случае.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top