![]() |
|
||||||||||
|
|||||
|
Регистрация: Feb 2006
Сообщений: 580
|
var mn:MovieClip = this;
var inter:Number = 0;
var i:Number = 0;
//
function createNew():Void {
mc = mn.attachMovie('mc_main', 'mc_main'+i, mn.getNextHighestDepth(), {_y:rand(90, 110), _alpha:rand(30, 100), _rotation:rand(-50, 50)});
mc._xscale = mc._yscale=rand(20, 150);
trace(mc._width);
trace(mc._x=Math.round((355/2)-(mc._width/2)));
}
//
function timeCr():Void {
i == 10 ? i=0 : i++;
createNew();
mc.onEnterFrame = function():Void {
if (this._currentframe == this._totalframes) {
delete this.onEnterFrame;
this.removeMovieClip();
}
};
}
//
function rand(a:Number, b:Number):Number {
return Math.round((b-a)*Math.random()+a);
}
//
inter = setInterval(timeCr, 1000);
2. Функция которая генерирует случайное число от a до b. Числа a и b передаются в функцию извне как аргументы. 3. Функция которая аттачит на сцену мувик с бегущим человечком. Ссылка на новый мувик сохраняется в переменной mc. При вставке мувика, параметры _x, _y, _xscale, _yscale, _alpha, _rotation определяются случайным числом которое выдает функция rand(a,b)(мы определили эту функцию ранее). mc._xscale=mc._yscale чтобы сохранять пропорции человечка( можно и не сохранять). trace(mc._x=Math.round((355/2)-(mc._width/2))) - это я так, немного неуклюже определил точку вставки мувика, чтобы он вставлялся примерно в средине экрана, в зависимости от масштаба. 355 вероятно можно заменить на stage._width...function createNew():Void {
mc = mn.attachMovie('mc_main', 'mc_main'+i, mn.getNextHighestDepth(), {_y:rand(90, 110), _alpha:rand(30, 100), _rotation:rand(-50, 50)});
mc._xscale = mc._yscale=rand(20, 150);
trace(mc._width);
trace(mc._x=Math.round((355/2)-(mc._width/2)));
}
- считает i(что в принципе и не нужно, но я как-то привык. Даже если бы мы вставляли все мувики с одним и тем же именем, flash все равно создает новые мувики, только обзывает их instance n) - запускает функцию создания нового мувика - удаляет отработавшие мувики. Отработавший, в данном случае, это мувик который дошел до своего последнего кадра. Как происходит удаление: для каждого нового мувика запускается событие onEnterFrame, с этим событием связана функция, которая отслеживает текущий кадр конкретного мувика. Если этот кадр равен последнему кадру, то данный мувик удаляется. Получается, что мы запускаем одновременно некоторое количество этих функций. Я проверял, производительность просаживается совсем незначительно. function timeCr():Void {
i == 10 ? i=0 : i++;
createNew();
mc.onEnterFrame = function():Void {
if (this._currentframe == this._totalframes) {
delete this.onEnterFrame;
this.removeMovieClip();
}
};
}
|
![]() |
Часовой пояс GMT +4, время: 06:49. |
|
|
« Предыдущая тема | Следующая тема » |
|
|