Показать сообщение отдельно
Старый 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.