Показать сообщение отдельно
Старый 20.11.2006, 01:19
pkfun вне форума Посмотреть профиль Отправить личное сообщение для pkfun Посетить домашнюю страницу pkfun Найти все сообщения от pkfun
  № 7  
Ответить с цитированием
pkfun

Регистрация: 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);
1. Определяем переменные.
Код:
var mn:MovieClip = this;
var inter:Number = 0;
var i:Number = 0;
2. Функция которая генерирует случайное число от a до b. Числа a и b передаются в функцию извне как аргументы.
Код:
function rand(a:Number, b:Number):Number {
	return Math.round((b-a)*Math.random()+a);
}
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)));
}
4. Эта функция выполняет несколько задач:
- считает 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();
		}
	};
}
5. И, наконец, код который все запускает. 1000 это интервал с которым будут создаваться новые мувики. Чем меньше это число, тем больше будет человечков в кадре и больше одновременных onEnterFrame.
Код:
inter = setInterval(timeCr, 1000);