Flash: передать аргументы конструктора объектам, размещенным на сцене? - PullRequest
1 голос
/ 28 февраля 2010

Можно ли передать аргументы конструктора объектам экземпляра, которые я помещаю на сцену? Централизованы ли экземпляры объектов экземпляра где-нибудь, как в .NET WinForms, поэтому я могу просто отредактировать конструктор xxx = new CustomRecangle()?

public class CustomRectangle extends MovieClip {         
    public function CustomRectangle(width:int, height:int) {
        this.width = width;
        this.height = height;
    }
}

Ответы [ 4 ]

4 голосов
/ 01 марта 2010

Я не верю, что вы можете сделать это, но у вас есть два варианта:

1) Вы можете свернуть его в компонент Flash. Сделайте различные свойства, которые вы хотите установить, проверяемыми в вашем AS-файле, скомпилируйте его в компонент и поместите на сцену. Затем вы можете отбросить несколько экземпляров и установить параметры этих экземпляров в каждом экземпляре уникальными.

2) Вы можете просто добавить функцию "init ()", которая вызывается для вашего объекта, и настроить ее для передачи ваших различных свойств в init () вместо конструктора.

Наконец, и это, я считаю, по закону составляет ЧЕРНУЮ МАГИЮ, поэтому не делайте этого, если вы АБСОЛЮТНО не должны:

Мне пришлось сделать это один раз, потому что другого пути буквально не было. В основном, скажем, у вас есть 200 объектов на сцене, каждый с уникальным именем экземпляра. Было бы слишком много работы, чтобы вернуться назад и вручную повторить каждое из них, чтобы принять пользовательские значения, и из-за того, как программа спроектирована, будет очень сложно писать вызовы инициализации для всего.

Таким образом, вместо этого вы можете использовать this.name для каждого объекта. Напишите статический класс MyObjectManager, в котором содержится словарь, содержащий объекты, сопоставленные с именами экземпляров. Затем в конструкторе ваших объектов вы можете написать что-то вроде «init (MyObjectManager.dict [this.name])» и Боб - ваш дядя.

Дайте мне знать, если это имеет смысл. Теперь поймите, что при таком подходе возникают огромные проблемы - это усложняет обновление вашего кода и тесно связывает всю вашу логику с вашим соглашением об именовании в состоянии, поэтому если какое-либо из имен ваших экземпляров отключено, вы снова прикручен.

Но это вариант. Между тремя указанными здесь путями вы сможете достичь всего, что вам нужно!

1 голос
/ 28 февраля 2010

Да, можно, но в конструкторе расширенного класса не забудьте вызвать функцию super (), которая вызовет конструктор базового класса.

0 голосов
/ 02 марта 2010

Я думаю, что вам лучше всего убрать объект со сцены Flash. Сделайте это библиотечным классом. и сделать что-то вроде

var myRectangle = new CustomRectangle(100, 100);
myRectangle.x = 200; // These should be whatever its location needs to be
myRectangle.y = 200;
addChild(myRectangle);
0 голосов
/ 28 февраля 2010

См. этот ответ, если это символ, который вы присоединяете через Flash IDE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...