Вход

Просмотр полной версии : Конструткоры классов (общение друг с другом)


ir73
10.01.2006, 18:52
Вот интересно, как кто справляется с такой задачей. Есть мувик, который экстендится классом. И есть другой мув, который экстендится другим классом. Оба на сцене лежат. И вот у одного мува в конструкторе функция, которая что то делает с содержимым второго мувика (например меняет размер вложенного мува). Но дело в том, что когда конструктор выполняется, то все вложенные хлементы мува = undefined. Решить проблему может например onEnterFrame. Который запустит функцию, как только необходимый элемент будет !udenfined. Но имхо способ не самый лучший. Есть что изящнее?

Reijii
10.01.2006, 18:58
может я неправильно понял.. но разме можно изменять что-то , у чего-то, если его еще нe существует ? а на onEnterFrame ты просто дожидаешся пока оно засуществует.. может стоит тогда "инициализировать" изменения из второго мувика, уже при его ? там флаг в первый передать како-то.. или инициализировать в начале второй а потом первый... :confused:

ir73
10.01.2006, 19:16
ну вот я и хотел узнать, как узнать "готовность" мува, помимо onenterframe

Antares
10.01.2006, 19:19
Если конструктор того, к чему ты обращаешься, отработал, "по науке" должна быть и проведена инициализация параметров. Поэтому создав один объект (к которому происходит обращение) в коде до вызывающего объекта, все должно быть доступно.

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

Antares
10.01.2006, 19:21
ну вот я и хотел узнать, как узнать "готовность" мува, помимо onenterframe
Одна из рекомендуемых практик гласит -- "если отработал конструктор -- объект готов к работе как минимум с неким стандартным набором свойств".
Если это не так -- значит, архитектура системы сделана криво

ir73
10.01.2006, 19:33
Если конструктор того, к чему ты обращаешься, отработал, "по науке" должна быть и проведена инициализация параметров. Поэтому создав один объект (к которому происходит обращение) в коде до вызывающего объекта, все должно быть доступно.
-------

вот и ответ. спасибо.

silin
10.01.2006, 21:18
извиняюсь, конечно, но я не сумел представить ситуацию, когда из конструктора одного класса надо подправлять что-то в конструкторе другого (или я ничего не понял..)
ir73, не интригуй, раскажи, что за фокусы..

Antares
11.01.2006, 01:24
Силин, не в конструкторе поправить. А просто обратиться к объекту, к его членам.

ir73
26.01.2006, 23:59
вот наконец нашел пример, который мог бы подойти в эту тему. Имеем 2 мувика которые экстендятся разными классами Mov1Class и Mov2Class. Оба эти класса прописаны в линкадже. Оба мувика лежат на сцене. В конструкторе первого мувика присваивается переменная someVar = 1. А во втором мувике эта переменная должна прочитаться myVar = _parent.muv1.someVar; И естественно, мы получаем undefined потому что на момент присвония мувик не инициализировался и для конструктора первого как бы не существует (все верно?). Так как же быть в этом случае и передать переменную?

silin
27.01.2006, 01:10
пример бредовый: зная класс muv1, стало быть и muv1.someVar зачем читать это значение у экземпляра ?
чего добиваемся не понятно..

ir73
27.01.2006, 01:19
class Muv1Class extends MovieClip {
public var someVar = 1;

public function Muv1Class () {

}


}

class Muv2Class extends MovieClip {


public function Muv2Class () {
var k = _parent.muv1.someVar ;
}


}


в итоге имеем что k = undefined. Как быть ?

silin
27.01.2006, 01:29
var a=b;
var b=1;
trace(a);//undefined
как быть ?
имхо так
a=1;
b=1;
ps: объясни зачем это надо, может все проще..

ir73
27.01.2006, 10:25
ну скажем у менея есть 15 классов. И всем надо передать инит значение одной переменной. Проще задать это значение в одном классе и проичитать его из других 15ти, нежели каждый рз менять его в ручную во всех 15.

Ata
27.01.2006, 11:43
а ты не выкладывай все эти мувики сразу на сцену, а аттач их из библиотеки и, соответственно, первым аттач мувик, в котором у тебя переменная.

silin
27.01.2006, 18:24
Проще задать это значение в одном классе и проичитать его из других 15ти, нежели каждый рз менять его в ручную во всех 15.
проще задать это значение в руте или _global
или в классе, от которого твои классы будут наследовать

ir73
28.01.2006, 14:42
да, только если так