PDA

Просмотр полной версии : #initclip и инициализация переменных


TTS
11.04.2010, 16:15
#initclip
var a=10;
#endinitclip
trace(a);
пишет "undefined"
Что это? Баг или фича?

iNils
11.04.2010, 16:33
Не баг и не фича. Цель какая?

TTS
11.04.2010, 16:52
выполнить инициализацию переменных до обращения к ним из другого мувика, и чтоб переменным не присваивались исходные значения каждый раз при переходе на 1-й кадр

iNils
11.04.2010, 17:00
#initclip
function Test() {
}
Test.prototype = new MovieClip();
Object.registerClass("libTest",Test);
Test.prototype.a = 10;
#endinitclip
trace(a);libTest - это linkage символа в библиотеки

TTS
11.04.2010, 17:13
Спасибо.

И почему нельзя было сделать все просто и красиво? Почему через заднее место?..

iNils
11.04.2010, 17:48
Так и сделали просто, а ваш вариант как раз и был через одно место.

TTS
11.04.2010, 18:26
:mosking:

iNils
11.04.2010, 18:30
Там же много всяких возможностей, о которых вы не подумали.

TTS
11.04.2010, 18:55
Я вправе был ожидать от директивы с таким названием удобств инициализации свойств и методов клипа, в котором она прописана. На деле я получаю усложнение кода и плохую читаемость.
Назвали бы как-нибудь по-другому... Насколько понимаю, код, заключенный в #initclip..#endinitclip, вообще не имеет привязки к клипу, в котором прописан, и совершенно необязательно должен быть предназначен для инициализации.
Ну придется довольствоваться тем, что то есть.

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

iNils
11.04.2010, 19:12
Это as1 который создавался 10 лет назад. Многие ошибки были учтены и появился as2. Поэтому требовать что-то сейчас уже поздно :)
function Test() {
}Создали класс. С этого момента (с кодом ниже), все экземпляры данного клипа будет иметь не копию кода, а использовать шаблон, что съедает меньше памяти.
Test.prototype = new MovieClip();Сделали его наследником от класса MovieClip, а ведь могли бы и быть и другие классы.
Object.registerClass("libTest",Test);Связали наш класс с символом. Ведь класс мог и не иметь никакого отношения к данному символу.
Test.prototype.a = 10;Создали свойство у всех экземпляров и дали ему начальное значение.
Если бы написали так
Test.a = 10;то свойство было бы статичным, то есть его значение во всех клипах данного класса было бы одинаковым при изменение.

Теперь вы можете создать еще один клип, дать ему linkage libTest2 и связать с уже созданным классом
#initclip
Object.registerClass("libTest2",Test);
#endinitclip
trace(this.a);
не описывая все повторно.

TTS
11.04.2010, 20:48
блин, пришлось без инитклипа обходиться
слишком мудрено получается и onEnterFrame не запустишь