Показать сообщение отдельно
Старый 25.09.2006, 01:27
Хемуль вне форума Посмотреть профиль Отправить личное сообщение для Хемуль Найти все сообщения от Хемуль
  № 2  
Ответить с цитированием
Хемуль
Квач
 
Аватар для Хемуль

Регистрация: Sep 2006
Адрес: Украина, Киев
Сообщений: 1,526
Ниже я написал код для следующего механизма:
1. Картинки берутся из библиотеки.
2. В библиотеки каждая картинка должна быть мувиклипом с linkage id'ом вроде "Имя картинки"+"Номер картинки". Например, "pic1", "pic2", "pic3" и т.д.
3. Первая картинка не проявляется, а показана сразу проявленной.
4. Механизм проявления такой:
[---DI---][--------SI--------]
[------------------][---DI---][--------SI--------]
[--------------------------------------][---DI---][--------SI--------]
Где DI - интервал проявления, SI - интервал отображения с _alpha 100%.
Как видите, следующая картинка начинает отображаться над предыдущей, достигает _alpha 100%, после чего предыдущая (которая уже перекрыта следующей) удаляется. Для более наглядного представления о том, как работает код, смотрите во Флеше Control/Debug Movie (Ctrl+Shift+Enter).
5. Точка привязки в мувиклипах с картинками - левый верхний угол или как нравится.
Код:
// Количество кадров, в течение которых картинка будет существовать с _alpha 100
var SHOW_INTERVAL:Number = 90;
// Количество кадров, в течение которых картинка будет проявляться
var DISSOLVE_INTERVAL:Number = 30;
// Строка, к которой будет прибавляться номер картинки для выборки из библиотеки (начиная с 1)
var PICTURE_BASE_NAME:String = "pic";
// Количество картинок, которые нужно извлечь из библиотеки
var PICTURES_NUMBER:Number = 3;
// Координата X точки, к которой будет привязываться новая картинка
var PICTURES_X:Number = 0;
// Координата Y точки, к которой будет привязываться новая картинка
var PICTURES_Y:Number = 0;

// Поскольку первая картинка уже проявлена, ставим:
var frameCounter:Number = DISSOLVE_INTERVAL;
// Номер текущей картинки
var currentPicture:Number = 1;

// Добавляем первую картинку
addPicture(currentPicture).frameCounter = DISSOLVE_INTERVAL;

// Определяем функцию добавления новой картинки
function addPicture(pictureNum):MovieClip
{
	// Имя новой картинки (оно же равно идентификатору в библиотеке)
	var newPictureName:String = PICTURE_BASE_NAME + pictureNum;
	// Мувиклип новой картинки
	var newPicture:MovieClip = this.attachMovie(newPictureName, newPictureName, this.getNextHighestDepth(), {_alpha:0, _x:PICTURES_X, _y:PICTURES_X});
	// Устанавливаем счётчик кадров для мувиклипа новой картинки
	newPicture.frameCounter = 1;
	// Определяем событие onEnterFrame для мувиклипа новой картинки
	newPicture.onEnterFrame = function()
	{
		// Проверяем, нужно ли удалять мувиклип картинки
		if (this.frameCounter > (DISSOLVE_INTERVAL + SHOW_INTERVAL))
		{
			// Удаление мувиклипа картинки
			this.removeMovieClip();
		}
		// Проверяем, проявляется ли данная картинка
		if (this.frameCounter <= DISSOLVE_INTERVAL)
		{
			// Изменение прозрачности картинки во время проявления
			this._alpha = this.frameCounter * (100 / DISSOLVE_INTERVAL);
		}
		// Наращиваем значения счётчика кадров мувиклипа картинки
		this.frameCounter++;
	}
	// Возвращаем мувиклип новой картинки
	return newPicture;
}

// Определяем событие onEnterFrame для _root
onEnterFrame = function()
{
	// Проверяем, пора ли выводить новую картинку
	if (frameCounter > SHOW_INTERVAL)
	{
		// Наращиваем значение номера текущей картинки
		currentPicture++;
		// Соблюдаем пределы :)
		if (currentPicture > PICTURES_NUMBER)
		{
			// Сбрасываем значение номера текущей картинки
			currentPicture = 1;
		}
		// Добавляем новую картинку
		addPicture(currentPicture);
		// Сбрасываем значение счётчика кадров для _root
		frameCounter = 1;
	}
	else
	{
		// Наращиваем значение счётчика кадров для _root
		frameCounter++;
	}
}
Этот код можно положить куда угодно. В прикреплении живой пример.
Вложения
Тип файла: zip DissolveSequence.zip (71.7 Кб, 66 просмотров)


Последний раз редактировалось Хемуль; 25.09.2006 в 03:02.