![]() |
|
||||||||||
|
|||||
|
Регистрация: Mar 2009
Сообщений: 49
|
Добрый день.
Есть такой вот снег.Взятый от сюда. http://www.flashist.ru/2007/12/30/sneg-vo-flash/ я его встроил в мувик, и он запускается , если запускает мувик в котором он лежит. но при каждом следующем запуске, снега становиться все больше и больше , и CPU начинает перегружаться.. Вопрос такой, как избежать этого в данном случае? я пытался перегружать все переменные и интервали(код ниже) но это не помогает. 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); // |
|
|||||
|
Регистрация: Jun 2008
Адрес: пока еще здесь
Сообщений: 198
|
Я так понял, что если увеличить период с 75 мс до 750, снежинки будут создаваться реже:
Как вариант - можно попробовать с переменными. |
|
|||||
|
Регистрация: Mar 2009
Сообщений: 49
|
да, как я понимаю , он начинает запускать их параллельно.. хотя я делаю
так: и потом так Добавлено через 12 часов 55 минут в общем решил отказаться от него, выглядит красиво, но тормозит безбожно на слабых машинках.. хотя ответ было бы интересно узнать. |
|
|||||
|
Регистрация: Mar 2009
Сообщений: 49
|
вот переделал, его без ActionScript , выглядит конечно не так круто, но схоже .. зато быстрее на мой взгляд. Выложу может кому пригодиться . Спасибо всем, тема закрыта.
![]() |
![]() |
![]() |
Часовой пояс GMT +4, время: 14:48. |
|
|
« Предыдущая тема | Следующая тема » |
| Теги |
| очистка , перегрузка , снег |
|
|