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

Регистрация: Sep 2006
Адрес: Украина, Киев
Сообщений: 1,526
2 edo:
Вот, написал вам пример. Чувствую, за прототипы в коде ругать будут... ^_^ Но это ничего, они по сути просто для демонстрации используются и к загрузке не относятся.
Значит, допустим, у нас есть папка resource в той же папке, в которой лежит флешка. В папке resource лежат 9 файлов: r1.jpg - r9.jpg... Мы ЗНАЕМ, что их 9. О том, как загружать флешки до того, как будет разорвана цепь нумерации, я писал выше. Тут же мы знаем, что их 9 и, если одна не загружается, переходим к загрузке следующей, пока не пройдём все 9. На месте каждой картинки во время загрузки пишутся проценты прогресса. После загрузки мувиклипу назначаются стандартные события.
Структура сцены такая:
- Мувиклип container (общий контейнер для всего)
-- Текстовые поля прогресса загрузки (создаются в процессе загрузки)
-- Мувиклип frame (рамки)
-- Мувиклип movies (контейнер для загружаемых мувиклипов)
--- Мувиклипы movie1 - movie9 (загружаемые мувиклипы)
Вот код:
Код:
var movieBaseName:String = "resources/r";
var movieExtension:String = "jpg";
var currentMovie:Number = 1;
var moviesNumber:Number = 9;
var moviesInRow:Number = 3;
var containerClipName:String = "container";
var frameClipName:String = "frame";
var moviesContainerClipName:String = "movies";
var movieContainerClipBaseName:String = "movie";
var progressTextName:String = "progress";
var left:Number = 100;
var top:Number = 100;
var movieWidth:Number = 60;
var movieHeight:Number = 60;
var rowsInterval:Number = 10;
var columnsInterval:Number = 10;
var progressTextWidth:Number = 40;
var progressTextHeight:Number = 20;
var progressTextFont:String = "_sans";
var progressTextSize:Number = 14;

var containerClip:MovieClip = this.createEmptyMovieClip(containerClipName, this.getNextHighestDepth());
containerClip._x = left;
containerClip._y = top;
var moviesContainerClip:MovieClip = containerClip.createEmptyMovieClip(moviesContainerClipName, containerClip.getNextHighestDepth());
containerClip.attachMovie("frame", frameClipName, containerClip.getNextHighestDepth());

var clipsLoader:MovieClipLoader = new MovieClipLoader();
var clipsLoaderListener:Object = new Object();

clipsLoaderListener.onLoadStart = function(targetClip:MovieClip)
{
	targetClip._parent.createTextField(progressTextName, targetClip._parent.getNextHighestDepth(), targetClip._x + (movieWidth - progressTextWidth) / 2, targetClip._y + (movieHeight - progressTextHeight) / 2, progressTextWidth, progressTextHeight);
	var progressTextFormat:TextFormat = new TextFormat();
	progressTextFormat.font = progressTextFont;
	progressTextFormat.size = progressTextSize;
	targetClip._parent[progressTextName].setNewTextFormat(progressTextFormat);
}

clipsLoaderListener.onLoadComplete = function(targetClip:MovieClip)
{
	targetClip._parent[progressTextName].removeTextField();
	loadNextMovie();
}

clipsLoaderListener.onLoadInit = function(targetClip:MovieClip)
{
	targetClip.onRollOver = function()
	{
		this.setTransformRGBA(100, 110, 100, 0, -100, 0, 100, 0);
	};
	targetClip.onRollOut = targetClip.onReleaseOutside = function()
	{
		this.resetTransformRGBA();
	};
	targetClip.onRelease = function()
	{
		trace("MovieClip: " + targetClip);
	};
}

clipsLoaderListener.onLoadError = function(targetClip:MovieClip, errorCode:String)
{
	targetClip.removeMovieClip();
	loadNextMovie();
}

clipsLoaderListener.onLoadProgress = function(targetClip:MovieClip, loadedBytes:Number, totalBytes:Number)
{
	var percent:Number = Math.ceil((loadedBytes / totalBytes) * 100);
	var progressTextField:TextField = targetClip._parent[progressTextName];
	progressTextField._x = targetClip._x + (movieWidth - progressTextField.textWidth) / 2;
	progressTextField._y = targetClip._y + (movieHeight - progressTextField.textHeight) / 2
	progressTextField.text = percent + "%";
}

function loadNewMovie(movieNumber:Number)
{
	var movieName:String = movieBaseName + movieNumber + "." + movieExtension;
	var movieContainerClipName:String = movieContainerClipBaseName + movieNumber;
	var movieContainerClip:MovieClip = moviesContainerClip.createEmptyMovieClip(movieContainerClipName ,moviesContainerClip.getNextHighestDepth());
	movieContainerClip._x = ((movieNumber - 1) % moviesInRow) * (movieWidth + columnsInterval) + columnsInterval;
	movieContainerClip._y =	Math.floor((movieNumber - 1) / moviesInRow) * (movieHeight + rowsInterval) + rowsInterval;
	clipsLoader.loadClip(movieName, movieContainerClip);
}

function loadNextMovie()
{
	currentMovie++;
	if (currentMovie <= moviesNumber)
	{
		loadNewMovie(currentMovie);
	}
}

MovieClip.prototype.setTransformRGBA = function (ra, rb, ga, gb, ba, bb, aa, ab)
{
	if (arguments.length < 8)
	{
		return false;
	}
	var x:Number = 0;
	while (x < arguments.length)
	{
		if (isNaN(arguments[x++]))
		{
			return false;
		}
	}
	if (ra <= 100 && ga <= 100 && ba <= 100 && aa <= 100 && ra >= -100 && ga >= -100 && ba >= -100 && aa >= -100 && rb <= 255 && gb <= 255 && bb <= 255 && ab <= 255 && rb >= -255 && gb >= -255 && bb >= -255 && ab >= -255)
	{
		var thisColor:Object = {ra:ra, rb:rb, ga:ga, gb:gb, ba:ba, bb:bb, aa:aa, ab:ab};
		var col:Color = new Color(this);
		col.setTransform(thisColor);
		return true;
	}
	else
	{
		return false;
	}
}

MovieClip.prototype.resetTransformRGBA = function()
{
	var thisColor:Object = {ra:100, rb:0, ga:100, gb:0, ba:100, bb:0, aa:100, ab:255};
	var col:Color = new Color(this);
	col.setTransform(thisColor);
}

clipsLoader.addListener(clipsLoaderListener);
loadNewMovie(currentMovie);
Исходник прикрепляю.
Вложения
Тип файла: zip loadMovies.zip (49.1 Кб, 113 просмотров)
__________________
Да не нужно тебе читать документацию по Flash и AS от Adobe - ты слишком умён для этого


Последний раз редактировалось Хемуль; 11.10.2006 в 04:11.