PDA

Просмотр полной версии : загрузка мувика, прелоэдер и переменные


alex001
23.07.2009, 20:19
есть игра. весит прилично.
поэтому отдельно сделал меню отдельно видео ролики отдельно каждый уровень.
все файлы находяться в формате swf, в одной папке.
вот вообщем что мне необходимо:

команда которая будет загружать, по имени следующий свф, а снизу цифорками написаны проценты сколько загрузилось. вообщем прелоэдер.
и еще надо чтобы все переменные которые были в этом клипе сохранялись, а точнее
их можно было использовать в загруженном мувике, с теми значениями которые были даны в предыдущем. :confused:

mooncar
23.07.2009, 20:58
Используйте MovieClipLoader, напишите функцию nextLoad, где вызываете loadClip, а в методе onLoadInit - обращение опять к этой функции nextLoad.
Экземпляр MovieClipLoader и слушатель можно один и тот же использовать.
Переменные для аккуратности забивайте в массив какой-нибудь в теле того же onLoadInit.

alex001
23.07.2009, 21:00
а что за onInit? можно по подробнее, что это?

mooncar
23.07.2009, 21:06
Если известно количество загружаемых swf-ок, то рекурсию прерываете по достижению счетчиком этого числа, если число неизвестно - прерываете рекурсию по срабатыванию onLoadError

Добавлено через 1 минуту
onLoadInit - я ошибся сперва - это метод класса MovieClipLoader, который вызывается при полной готовности загруженного клипа.

alex001
23.07.2009, 21:10
мне нужно не совсем то,
в канце каждого мувика должна стоять команда типо load(lvl2.swf)
в следуещем load(lvl3.swf).
я вполне смогу в конце каждого клипа написать код заного.
еще нужен, как я говорил, прелоэдер.
P.S.а как MovieClipLoader работает?

mooncar
23.07.2009, 21:16
Тогда так: в методе onLoadInit при загрузке очередного ролика узнаете url следующего ролика, и передаете его этой функции.
Такой вот кусок:
listener.onLoadInit= function (target_mc:MovieClip) {
DATARRAY[0] = target_mc.var1; //навсегда забирем данные в основной ролик
....
DATARRAY[N] = target_mc.varN;
nextLoad(target_mc.url); //здесь забираем из загруженного ролика url следующего и передаем на рекурсию
};
Читайте про класс, вам без него не обойтись.

alex001
23.07.2009, 21:22
но все мувики находяться в папке, не в странице интернета, тогда url...

mooncar
23.07.2009, 21:25
Вот в сыром виде:

total = 20;
i = 1;

var mcLoader:MovieClipLoader = new MovieClipLoader();
var listener:Object = new Object();
mcLoader.addListener(listener);

listener.onLoadInit= function (target_mc:MovieClip) {
DATARRAY[0] = target_mc.var1; //навсегда забирем данные в основной ролик
....
DATARRAY[N] = target_mc.varN;
i++;
//тут можно выгрузить загруженное, если не нужно больше с помощью unloadMovie
nextLoad(target_mc.nexturl); //здесь забираем из загруженного ролика url следующего и передаем на рекурсию
};

function nextLoad (adres) {
if (i <= total) {
_root.createEmptyMovieClip("container" + i, i);
mcLoader.loadClip(adres, _root["container" + i]);
}
};

nextLoad ();

Добавлено через 2 минуты
Какая разница, где находятся?
Я говорил об url как о местонахождении загружаемого ролика, хоть http, хоть папку укажите.

alex001
23.07.2009, 21:28
а что за url?
я имею в виду откуда он тут, и что делает?

Добавлено через 6 минут
он выдал ошибки.

Unexpected '}' encountered
Unexpected '.' encountered

mooncar
23.07.2009, 21:36
мне нужно не совсем то,
в канце каждого мувика должна стоять команда типо load(lvl2.swf)

Вот это самое "lvl2.swf" - и есть url следующего ролика.
Может быть так:
"data/superswfki/1.swf"
Вам нужно прописать переменную в ролимках, которая бы называлась, если брать мой код, nexturl, и присваивать ей этот самый url, или, если вас это так термин тут смущает, путь.
То есть в каждом ролике пишите адрес следующего:
var nexturl:String = "lvl2.swf"
..
var nexturl:String = "lvl20.swf"
В общем, как хотите, так и управляйте адресацией загружаемых роликов...

Добавлено через 1 минуту
Что значит ошибки?
Вы переменную nexturl пропишите в роликах и синтаксис проверьте, я вам пример накидал, а не рабочий код дал.

Добавлено через 3 минуты
Это компилятор выругался на "....", означающие пропуск некоторого количества элементов, где я показывал как данные в массив загонять, а вы просто даже и не подумавши все запустили. Вы же там говорили, что вам данные нужно забирать из роликов.

Добавлено через 8 минут
А статус загрузки возьмете из
listener.onLoadProgress = function(target_mc, loadedBytes, totalBytes) {
//тут выводите
trace ("загружено " + loadedBytes + " из " + totalBytes);
}
Учите матчасть про MovieClipLoader - сильно поможет.