Показать сообщение отдельно
Старый 25.08.2009, 17:04
sy555 вне форума Посмотреть профиль Отправить личное сообщение для sy555 Найти все сообщения от sy555
  № 1  
Ответить с цитированием
sy555

Регистрация: Mar 2009
Сообщений: 49
Question Снег ,очистка

Добрый день.
Есть такой вот снег.Взятый от сюда.
http://www.flashist.ru/2007/12/30/sneg-vo-flash/

я его встроил в мувик, и он запускается , если запускает мувик в котором он лежит.
но при каждом следующем запуске, снега становиться все больше и больше , и CPU начинает перегружаться.. Вопрос такой, как избежать этого в данном случае? я пытался перегружать все переменные и интервали(код ниже) но это не помогает.

Код AS1/AS2:
Stage.scaleMode = "noScale";
glob_reset();
trace("Global reset complite");
//_root._quality = "BEST";
//Создаём переменные ,которые будут влиять на движение снежинок, своеобразный
//ВЕТЕР (по оси X) и ПРИТЯЖЕНИЕ (по оси Y)
//Это ветер (ускорение по оси X)
function glob_reset() {
_root.newX=  undefined;
_root.chX=  undefined;
_root.dX=0;
_root.x_int= undefined;
varDif= undefined;
//getNextHighestDepth()=  0;
varTarget._xscale=  undefined;
varTarget.dY= undefined;
varTarget.dX=  undefined;
clearInterval(_root.x_int);
clearInterval(intervalID);
clearInterval(intervalID1);
}
 
//Функция, которая будет периодически менять значение "СИЛЫ ВЕТРА".
function glob_func() {
	//Создаём переменную, значение которой будет варьироваться от -1 до +1
	//Это у нас будет новое значение ускорения по оси X (ветер)
t1.text=("_root.newX:  "+_root.newX + "\n" + "_root.chX:  "+_root.chX+ "\n" + "_root.dX:  "+_root.dX +"\n" + "_root.x_int:  "+_root.x_int+"\n" + "varDif:  "+varDif +"\n" + "getNextHighestDepth():  "+getNextHighestDepth() +"\n" + "varTarget._xscale:  "+varTarget._xscale   +"\n" +"varTarget.dY:  "+varTarget.dY +"\n" +"varTarget.dX:  "+varTarget.dX);	
	_root.newX = Math.random()*1-Math.random()*1;
	//Вычисляем ШАГ, за который будет изменяться прошлое значение ВЕТРА, на новое
	//значение. Делаем это для того, чтобы смена происходила не рывком, а плавно.
	_root.chX = (_root.newX-_root.dX)/(50+random(50));
	//На всякий случай удаляем старый интервал, если переход старого значения в 
	//новое ещё не успел закончиться.
	clearInterval(_root.x_int);
	//Запускаем новый интервал, который будет каждые 30 миллисекунд вызывать 
	//функцию, прибавляющую к старому значению слиы ВЕТРА, значение ШАГА, который
	//мы вычислили немного выше.
	_root.x_int = setInterval(function () {
		//Прибавляем к старому значению значение шага
		_root.dX += _root.chX;
		//Проверяем, если текущее значение скорости вестра приближённое до десятых
		//равно новому значению силы вытера, так же приближённому до десятых,
		//то переход старого значения силы ветра в новое уже закончился, а значит
		//можно удалять интервал вызывающий эту функцию.
		if (Math.round(_root.dX*10)/10 == Math.round(_root.newX*10)/10) {
			clearInterval(_root.x_int);
		}
	}, 30);
}
//Создаём интервал, который будет вызывать функцию изменения СИЛЫ ВЕТРА один
//раз в 5 секунд.
var intervalID1:Number=setInterval(glob_func, 5000);
//Создаём функцию движения снежинок
function move_func() {
	//Чем меньше снежинка, тем дальше она от нас находится, чем она дальше от нас
	//находится, тем менее заметны нам изменения в её положении. Другими словами
	//если объект (снежинка) стоящий от нас на рсстоянии 1 метра переместить на 
	//5 метров вправо, то мы это увидим точно. А если этот же обхект будет
	//находиться от нас на расстоянии 100 метров, то перемещения на 5 метров,
	//мы, возможно, ине заметим уже.
	//
	//varDif - это переменная, которая будет влиять на изменение положения
	//снежинки, таким образом, что чем снежинка меньше, тем медленней её положение
	//будет изменяться.
	varDif = this._xscale/100;
	//Прибавляем к текущей координате _x переменную скорости снежинки, и,
	//изменённую на значение varDif СИЛУ ВЕТРА
	this._x += this.dX+_root.dX*varDif;
	//Аналогично СИЛЕ ВЕТРА выше
	this._y += this.dY+_root.dY*varDif;
	//Если снежинка ушла за ниднюю границу флешки ,то мы удаляем эту снежинку.
	if (this._y>=410 | this._x>=150 | this._x<=-150) {
		this.removeMovieClip();
	}
}
//Функция, которая будет периодически создавать новые снежинки.
function snow_func() {
	//Подключаем на глдавную сцену из библиотеки экземпляр снежинки.
	//По оси _y снежинка будет стоять на 30 px выше верхнего края флешки.
	//По оси _x занчение может быть от -75 до ШИРИНА_ФЛЕШКИ + 75, т.е. созданная
	//снежинка может выходить за края флешки по оси _x
	max =50;
	varTarget = attachMovie("snow_mc", "snow"+getNextHighestDepth()+"_mc", getNextHighestDepth(), {_y:-30, _x:-150+Math.random()*(275)});
	//Опредеяем размер снежинки, который будет варьироваться от 25% исходного
	//размера, до 100%
	varTarget._xscale = varTarget._yscale=25+Math.random()*75;
	//Определяем значение собственной скорости снежинки по оси _x. Оно будет
	//варьироваться от -1 до +1
	varTarget.dX = Math.random()*1-Math.random()*1;
	//Определяем скорость падения снежинки. Скоростьпадения будет зависеть от
	//размера снежинки, но никогда не будет меньше 0.5
	varTarget.dY = 0.5+varTarget._xscale/100;
	//Каждый раз при смене кадра, для снежинки будет вызываться функция move_func
	varTarget.onEnterFrame = move_func;
}
//Создаём интервал, вызывающий функцию СОЗДАНИЯ СНЕЖИНОК раз в 75 миллисекунд.
var intervalID:Number=setInterval(snow_func, 75);
//