Просмотр полной версии : Создание слайдшоу
Добрый день!
Подскажите, пожалуйста, как мне создать во флэше слайдшоу?
Есть 3 swf файла, которые нужно поочередно воспроизводить. Первый проигрался, тут же начинается воспроизведение следующего.
Как проще всего это реализовать?
Во флеше не особо разбираюсь :(
Заранее благодарю за ответы!
Нашел в форуме следующий код
Есть "главный" файл, в котором 3 фрейма, каждый фрейм подгружает свой swf файл.
var container:MovieClip = _root.createEmptyMovieClip("container", 1);
// Создаём контейнер для подгрузки
var mcLoader:MovieClipLoader = new MovieClipLoader();
// Создаём функцию для отслежки загрузки
mcLoader.addListener(this);
mcLoader.loadClip("1.swf", container);
Но у меня не получается заставить это работать:(
Т.е. я создал новый файл. В нем сделал 3 фрейма. В каждом из этих фреймов написал код, указанный выше. Не работает :(
ПОМОГИТЕ!!
Вопрос достаточно срочный :(
2 Kristik:
Тут похожая задача:
http://flasher.ru/forum/showthread.php?t=86343
А зачем this в листенеры добавлять? Просто интересно, я уже не первый раз вижу этот код, очевидно, он из какого-то очень популярного источника, интересно все таки, что ж там дальше-то было? =)
2 wvxvw:
А что дальше? Слушали, что скажет _root, наверное.... ^_^ Или куда там этот код вставлялся...
2 Kristik:
А вы не помните, где нашли этот код? А то я не такой наблюдательный, как wvxvw, но теперь тоже стало интересно...
2 Хемуль:
Нашел в этом форуме! Честно говоря, ссылка не сохранилась :(
Ребята, помогите реализовать идею со слайдшоу!!
Пожалуйста!!
Буду жутко признателен за исходник.. но это в идеале, я сам понимаю.. люди все занятые и дергать их понапрасну мне не стоило!
Пожалуйста!
2 Kristik:
Вечером, может, постараюсь вам написать... Думаю, и до меня напишут.
2 Хемуль:
Спасибо!! Буду очень ждать!!
var movieBaseName:String = "resources/movie";
var movieExtension:String = "swf";
var currentMovie:Number = 0;
var moviesNumber:Number = 4;
var movieContainerClipBaseName:String = "movie";
var left:Number = 100;
var top:Number = 100;
var loading:Boolean = false;
var firstMovie:Boolean = true;
var clipsLoader:MovieClipLoader = new MovieClipLoader();
var clipsLoaderListener:Object = new Object();
clipsLoaderListener.onLoadStart = function(targetClip:MovieClip)
{
loading = true;
}
clipsLoaderListener.onLoadComplete = function(targetClip:MovieClip)
{
loading = false;
var previousMovie:Number = (currentMovie == 1 ? moviesNumber : currentMovie - 1);
var previousMovieClipName:String = movieContainerClipBaseName + previousMovie;
if (targetClip._parent[previousMovieClipName] != undefined)
{
targetClip.gotoAndStop(1);
}
if (firstMovie)
{
firstMovie = false;
loadNextMovie();
}
targetClip.onEnterFrame = function()
{
if (this._currentframe == this._totalframes)
{
if (loading)
{
this.gotoAndStop(this._totalframes);
}
else
{
var currentMovieClipName:String = movieContainerClipBaseName + (currentMovie);
var currentMovieClip:MovieClip = this._parent[currentMovieClipName];
currentMovieClip.play();
this.removeMovieClip();
loadNextMovie();
}
}
};
}
function loadNewMovie(movieNumber:Number)
{
var movieName:String = movieBaseName + movieNumber + "." + movieExtension;
var movieContainerClipName:String = movieContainerClipBaseName + movieNumber;
var containerClip:MovieClip = this.createEmptyMovieClip(movieContainerClipName, this.getNextHighestDepth());
var previousMovie:Number = (movieNumber == 1 ? moviesNumber : movieNumber - 1);
var previousMovieClipName:String = movieContainerClipBaseName + previousMovie;
this[previousMovieClipName].swapDepths(containerClip);
containerClip._x = left;
containerClip._y = top;
clipsLoader.loadClip(movieName, containerClip);
}
function loadNextMovie()
{
currentMovie++;
if (currentMovie > moviesNumber)
{
currentMovie = 1;
}
loadNewMovie(currentMovie);
}
clipsLoader.addListener(clipsLoaderListener);
loadNextMovie();
Картинки загружаются в мувиклипы, расположенные один под другим. Пока один проигрывается, второй под ним загружает в себя флешку. Если картинка нижняя загрузится раньше, чем проиграется верхняя, то она ждёт, пока верхняя проиграется и удалится. Если нижняя картинка загрузится позже, чем закончит проигрываться верхняя, то верхняя проигрывается до конца, ждёт загрузки нижней, а потом удаляется, после чего проигрывается нижняя. Может где-то ошибся. Тестировать с разными размерами лень. Будут вопросы или проблемы, пишите.
Исходник прикрепляю...
Альтернативный вариант =)
var _l1:MovieClipLoader = new MovieClipLoader();
var _l2:Object = {};
var _l3:Array = ["slide1.swf", "slide2.swf", "slide3.swf"];
var _l4:MovieClip = _root.createEmptyMovieClip("container", 0);
var _l5:Number = 0;
var _l6:Array = [];
for (i=0; i<_l3.length; i++) {
var _l7:MovieClip = _l4.createEmptyMovieClip("container"+i, _l4.getNextHighestDepth());
_l6.push(_l7);
_l1.loadClip("directory/"+_root._l3[i], _l7);
_l7._x = Stage.width;
_l7._y = Stage.height;
}
_l1.addListener(_l2);
_l2.onLoadComplete = function(mc) {
if (mc == _l6[0]) {
mc._x = 0;
mc._y = 0;
_l5++;
_root.switcher(_l5);
}
};
function switcher() {
_root.onEnterFrame = function() {
if (_root._l6[_root._l5-1]._currentframe == _root._l6[_root._l5-1]._totalframes && _root._l6[_root._l5].getBytesTotal() == _root._l6[_root._l5].getBytesLoaded()) {
_root._l6[_root._l5-1].stop();
_root._l6[_root._l5-1]._x = Stage.width;
_root._l6[_root._l5-1]._y = Stage.height;
_root._l6[_root._l5]._x = 0;
_root._l6[_root._l5]._y = 0;
_root._l5++;
}
};
}
15470
Хемуль, wvxvw!! Спасибо огромное!! пошле пробовать :)
2 Хемуль:
А можно еще один вопрос..
Мне нужно, чтобы это слайдшоу отображалось во весь экран.
Для этого в каждый отдельный клип я вставляю в первый кадр команду
fscommand ("fullscreen", true);
(нашел в форуме)
Все работает, если запускать "слайды" по очереди:) тыкая на них мышкой. Отображаются во весь экран.
А вот если эти уже "полноэкранные" слайды запускать из Вашего loadMoviesSequence, то все отображается в стандартном окне..
В loadMoviesSequence.swf тоже пробовал встроить
fscommand ("fullscreen", true);
Открывается во весь экран, но "слайды" проигрываюются в стандартном, маленьком размере :(
Помогите, пожалуйста..
Красным выделены строки, которые добавились. Исчезли строки, задающие начально положение мувиклипа-контейнера для загружаемой картинки. Теперь, когда картинка загружается, выбирается её бОльшая сторона и картинка маштабируется так, чтобы её бОльшая сторона помещалась в сцену полностью. После чего флешка центрируется внутри сцены. Может не самое лучшее, но вам, наверное, сгодится. Будут вопросы, пишите.
Код:
var movieBaseName:String = "resources/movie";
var movieExtension:String = "swf";
var currentMovie:Number = 0;
var moviesNumber:Number = 4;
var movieContainerClipBaseName:String = "movie";
var loading:Boolean = false;
var firstMovie:Boolean = true;
var clipsLoader:MovieClipLoader = new MovieClipLoader();
var clipsLoaderListener:Object = new Object();
clipsLoaderListener.onLoadStart = function(targetClip:MovieClip)
{
loading = true;
}
clipsLoaderListener.onLoadInit = function(targetClip:MovieClip)
{
var clipScale:Number;
if (targetClip._width > targetClip._height)
{
clipScale = (Stage.width / targetClip._width) * 100;
}
else
{
clipScale = (Stage.height / targetClip._height) * 100;
}
targetClip._xscale = clipScale;
targetClip._yscale = clipScale;
targetClip._x = (Stage.width - targetClip._width) / 2;
targetClip._y = (Stage.height - targetClip._height) / 2;
targetClip._visible = true;
}
clipsLoaderListener.onLoadComplete = function(targetClip:MovieClip)
{
loading = false;
var previousMovie:Number = (currentMovie == 1 ? moviesNumber : currentMovie - 1);
var previousMovieClipName:String = movieContainerClipBaseName + previousMovie;
if (targetClip._parent[previousMovieClipName] != undefined)
{
targetClip.gotoAndStop(1);
}
if (firstMovie)
{
firstMovie = false;
loadNextMovie();
}
targetClip.onEnterFrame = function()
{
if (this._currentframe == this._totalframes)
{
if (loading)
{
this.gotoAndStop(this._totalframes);
}
else
{
var currentMovieClipName:String = movieContainerClipBaseName + (currentMovie);
var currentMovieClip:MovieClip = this._parent[currentMovieClipName];
currentMovieClip.play();
this.removeMovieClip();
loadNextMovie();
}
}
};
}
function loadNewMovie(movieNumber:Number)
{
var movieName:String = movieBaseName + movieNumber + "." + movieExtension;
var movieContainerClipName:String = movieContainerClipBaseName + movieNumber;
var containerClip:MovieClip = this.createEmptyMovieClip(movieContainerClipName, this.getNextHighestDepth());
var previousMovie:Number = (movieNumber == 1 ? moviesNumber : movieNumber - 1);
var previousMovieClipName:String = movieContainerClipBaseName + previousMovie;
this[previousMovieClipName].swapDepths(containerClip);
containerClip._visible = false;
clipsLoader.loadClip(movieName, containerClip);
}
function loadNextMovie()
{
currentMovie++;
if (currentMovie > moviesNumber)
{
currentMovie = 1;
}
loadNewMovie(currentMovie);
}
fscommand ("fullscreen", true);
clipsLoader.addListener(clipsLoaderListener);
loadNextMovie();
Исходник не прикрепляю...
2: Хемуль!!! Спасибо :))) ДА, все работает!!! :)))
2 Kristik:
Учтите, что загружаемая флешка центрируется внутри сцены. Поэтому достаточно важно подобрать необходимое соотношение размеров сторон сцены. Просто картинки, линейные размеры которых в пикселях отличаются в разы, могут выглядеть по-разному для разных размеров сцен. Конечно, в идеале лучше иметь одинаковые по размеру картинки и размеры сцены подбирать соответственно.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.