Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #28, МАРТ 2003 г.

TIPS OF WEB: продвинутый альбом с порнушкой

Iv (dembicki@narod.ru)

Спецвыпуск Xakep, номер #028, стр. 028-110-3


Зацени прием цепной реакции!

Идея такова: начиная с первой, каждая последующая превьюшка после загрузки будет вызывать инициализацию загрузки следующей, и так по цепочке, пока не закончатся мувики этого класса.

Итак, КАЖДЫЙ ЭКЗЕМПЛЯР при загрузке создает мувик, в который будет грузиться превьюшка. Затем первому из десяти (или какое ты там поставил значение переменной _root.preview.preview_step) мувиков дается команда стартануть (инициализировать) загрузку превьюшки.

tmp.onLoad = function() {

this.createEmptyMovieClip("pic", 0);

if (this.num == 1) {

this.initLoading();

}

};

Инициализация загрузки - это последовательный вызов функций: 1) проверки наличия соответствующего узла XML; 2) собственно команды на загрузку (адрес берем из своего узла XML) и 3) проверки - загружена ли превьюшка.

tmp.initLoading = function() {

if (!this.checkNode()) {

return;

}

this.pic.loadMovie(_root.input_xml[this.num+this._parent.begin].attributes.preview);

this.onEnterFrame = this.checkIsLoaded;

};

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

tmp.checkNode = function() {

this.nod = _root.input_xml[this.num+this._parent.begin];

if (this.nod == undefined) {

this._parent["p"+(this.num+1)].initLoading();

this.removeMovieClip();

return false;

}

this.tooltip_text = this.nod.attributes.comment;

return true;

};

Проверка, загружена ли превьюшка, нужна, чтобы отловить момент, когда она полностью загрузилась. Когда это произошло, нужно сделать следующее: 1) стартануть загрузку следующей превьюшки; 2) задать стартовый масштаб картинки равным единице; 3) начать анимацию загруженной превьюшки.

tmp.checkIsLoaded = function() {

if (this.pic.getBytesLoaded()/this.pic.getBytesTotal() == 1) {

this._parent["p"+(this.num+1)].initLoading();

delete this.num;

this._xscale = this._yscale=1;

this.onEnterFrame = this.animateIt;

}

};

TIPSA 12

Принимай на вооружение прием расчета загрузки мувика, который засветился в листинге чуть выше! getBytesLoaded() и getBytesTotal() - рульные встроенные функции флэша.

TIPSA 13

Программная анимация часто прикольнее, чем покадровая, а весит... ноль!

Анимация загруженной картинки очень проста: в каждом кадре к масштабу прибавляем некий шаг (this.st), который тоже с каждым кадром увеличивается на 3. Через некоторое время масштаб станет больше чем 100% и сработает условие блока if. В этом блоке устанавливается масштаб равно 100% и прекращается обработка onEnterFrame.

tmp.animateIt = function() {

if (this._xscale>100) {

this._xscale = this._yscale=100;

delete this.st;

this.onEnterFrame = null;

return;

}

this._yscale = this._xscale += this.st += 3;

Назад на стр. 028-110-2  Содержание  Вперед на стр. 028-110-4