Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 26.03.2013, 13:28
vlad2 вне форума Посмотреть профиль Отправить личное сообщение для vlad2 Найти все сообщения от vlad2
  № 1  
Ответить с цитированием
vlad2

Регистрация: Sep 2012
Сообщений: 53
По умолчанию Помогите остановить анимацию снега!

Помогите остановить анимацию снега в определенном кадре!

Код AS1/AS2:
Stage.scaleMode = "noScale";
_root._quality = "BEST";
//Создаём переменные ,которые будут влиять на движение снежинок, своеобразный
//ВЕТЕР (по оси X) и ПРИТЯЖЕНИЕ (по оси Y)
//Это ветер (ускорение по оси X)
var dX:Number = 0;
//Это притяжение/гравитация (по оси Y);
var dY:Number = 0.25;
//Функция, которая будет периодически менять значение "СИЛЫ ВЕТРА".
function glob_func() {
	//Создаём переменную, значение которой будет варьироваться от -1 до +1
	//Это у нас будет новое значение ускорения по оси X (ветер)
	_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 секунд.
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>=Stage.height) {
		this.removeMovieClip();
	}
}
//Функция, которая будет периодически создавать новые снежинки.
function snow_func() {
	//Подключаем на глдавную сцену из библиотеки экземпляр снежинки.
	//По оси _y снежинка будет стоять на 30 px выше верхнего края флешки.
	//По оси _x занчение может быть от -75 до ШИРИНА_ФЛЕШКИ + 75, т.е. созданная
	//снежинка может выходить за края флешки по оси _x
	varTarget = _root.attachMovie("snow_mc", "snow"+_root.getNextHighestDepth()+"_mc", _root.getNextHighestDepth(), {_y:-30, _x:-75+Math.random()*(Stage.width+75)});
	//Опредеяем размер снежинки, который будет варьироваться от 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 = _root.move_func;
}
//Создаём интервал, вызывающий функцию СОЗДАНИЯ СНЕЖИНОК раз в 75 миллисекунд.
setInterval(snow_func, 75);
//
logo_mc.onRollOver = function() {
};
исходник снега
snow.rar   (0.7 Кб)
Вложения
Тип файла: swf snow.swf (767 байт, 98 просмотров)

Старый 26.03.2013, 14:13
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 2  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,112
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Код AS1/AS2:
var interval = setInterval(...)
Код AS1/AS2:
clearInterval(interval)
P.S. Белый снег на белом фоне чудесно выглядит.
__________________
hauts.ru

Старый 27.03.2013, 08:22
vlad2 вне форума Посмотреть профиль Отправить личное сообщение для vlad2 Найти все сообщения от vlad2
  № 3  
Ответить с цитированием
vlad2

Регистрация: Sep 2012
Сообщений: 53
Цитата:
Сообщение от Hauts Посмотреть сообщение
Код AS1/AS2:
var interval = setInterval(...)
Код AS1/AS2:
clearInterval(interval)
Что-то у меня вообще ничего не получается

Старый 27.03.2013, 10:30
dark256 вне форума Посмотреть профиль Отправить личное сообщение для dark256 Посетить домашнюю страницу dark256 Найти все сообщения от dark256
  № 4  
Ответить с цитированием
dark256
 
Аватар для dark256

блогер
Регистрация: Apr 2008
Адрес: SPb
Сообщений: 3,718
Записей в блоге: 5
Отправить сообщение для dark256 с помощью ICQ Отправить сообщение для dark256 с помощью Skype™
Код AS1/AS2:
Stage.scaleMode = "noScale";
 
var dX:Number = 0;			//Это ветер (ускорение по оси X)
var dY:Number = 0.25;		//Это притяжение/гравитация (по оси Y);
 
var wind
var snow
var x_int
 
function recalcWind(){
	_root.dX += _root.chX;
	if (Math.round(_root.dX*10)/10 == Math.round(_root.newX*10)/10) clearInterval(x_int);
}
 
function glob_func() {
	_root.newX = Math.random()*1-Math.random()*1;
	_root.chX = (_root.newX-_root.dX)/(50+random(50));
	clearInterval(x_int);
	x_int = setInterval( recalcWind, 30);
}
 
//Создаём функцию движения снежинок
function move_func() {
	varDif = this._xscale/100;
	this._x += this.dX+_root.dX*varDif;
	this._y += this.dY+_root.dY*varDif;
	if (this._y>=Stage.height) this.removeMovieClip();
}
//Функция, которая будет периодически создавать новые снежинки.
function snow_func() {
	varTarget = _root.attachMovie("snow_mc", "snow"+_root.getNextHighestDepth()+"_mc", _root.getNextHighestDepth(), 
				{_y:-30, _x:-75+Math.random()*(Stage.width+75)});
	varTarget._xscale = varTarget._yscale=25+Math.random()*75;
	varTarget.dX = Math.random()*1-Math.random()*1;
	varTarget.dY = 0.5+varTarget._xscale/100;
	varTarget.onEnterFrame = _root.move_func;
}
 
function allStart(){
	//Создаём интервал, который будет вызывать функцию изменения СИЛЫ ВЕТРА один раз в 5 секунд.
	wind = setInterval( glob_func, 5000 );
	//Создаём интервал, вызывающий функцию СОЗДАНИЯ СНЕЖИНОК раз в 75 миллисекунд.
	snow = setInterval(snow_func, 75);
}
 
 
function allStop(){
	clearInterval(snow)
	clearInterval(wind)
	clearInterval(x_int)
 
	for( var T in _root ){
		var SN = _root[T]
		if ( SN.indexOf("snow")>=0 ){
			delete SN.onEnterFrame
		}
	}	
}
 
 
btn_play.onRelease = allStart
btn_stop.onRelease = allStop
Каждой снежинке надо прибить ее onEnterFrame.
Если клип на ROOT имеет сигнатуру имени снежинки "SN.indexOf("snow")>=0", прибиваем энтерфрэйм.
Можно все снежинки держать в массиве, удаля их оттуда и добавляя, но для простоты сделано так.

Если посмотрите на код, то увидите, что _root вообще не надо использовать. В данном случае обращение к переменной, объявленной вне функции, происходит как к глобальной.

recalcWind() - вынес функцию в явную неанонимную. незачем тут это пихать в параметры. Это вообще уже некрасиво и нечитаемо.
__________________
FLASHER.MAP SOUNDSTAGE / CS3 / AS2


Последний раз редактировалось dark256; 27.03.2013 в 10:49.
Старый 27.03.2013, 15:27
vlad2 вне форума Посмотреть профиль Отправить личное сообщение для vlad2 Найти все сообщения от vlad2
  № 5  
Ответить с цитированием
vlad2

Регистрация: Sep 2012
Сообщений: 53
Вот спасибо dark256, сейчас буду разбираться!

Добавлено через 17 часов 38 минут
А вы можете вложить исходник на свой вариант кода. Почему-то у меня он отказывается работать

Создать новую тему Ответ Часовой пояс GMT +4, время: 15:30.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 15:30.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.