Передача параметров в конструктор для автоматически созданного класса активов AS3 - PullRequest
1 голос
/ 25 марта 2009

Я создаю подкласс 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 в качестве базового класса для символа MyClipA в библиотеке, в идеале я хотел бы иметь возможность выполнять clip = new MyClipA(17); без необходимости писать класс MyClipA самостоятельно.

Ответы [ 4 ]

1 голос
/ 23 апреля 2009

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

1 голос
/ 27 марта 2009

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

0 голосов
/ 25 марта 2009

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

0 голосов
/ 25 марта 2009

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

...