PDA

Просмотр полной версии : Запуск двух .swf файлов одновременно!


Izoniz
25.04.2007, 02:50
Нужно что б на сайте два мувика начинали играть одновременно.
Но есть одна проблемка один мувик несколько килобайт, а второй больше 300. Получаеться, что маленький загрузиться и начнет проигрывание. Выходит надо что б он стоял на стопе и узнавал когда загрузиться другой мувик, и как только другой начнет свой первый кадр, то он начнет и свое проигрывание. Вроде все просто, но как это написать в AS не знаю. Help...

Kikasso
25.04.2007, 03:05
намек: LocalConnection

Izoniz
25.04.2007, 03:36
ок, как законектить один с другим понял. сенкс. тепер как сделать чтоб он начал играть когда тот загрузиться?

~~~
25.04.2007, 09:15
Я бы реализовал с помощью external interface.
Один загружается -> через js постоянно узнаёт загрузился ли второй -> как только загрузился стартует и через js говорит второму "GO!".
И все дела... :) Линк ниже \|/
FLASHIMP - Смотри здесь:) (http://flashimp.blogspot.com/2007/03/external-interface.html)

Izoniz
25.04.2007, 21:18
я конечно с ява дружу но как из "определения позиции мыши на странице джава скриптом и возврата во флэш." сделать - "Один загружается -> через js постоянно узнаёт загрузился ли второй -> как только загрузился стартует и через js говорит второму "GO!"" даже не представляю...

Kikasso
25.04.2007, 21:57
ок, как законектить один с другим понял. сенкс. тепер как сделать чтоб он начал играть когда тот загрузиться?
А вы грузите через MovieClipLoader. Вставляйте маленькие флешки, которые грузят в себя большие.

Или: флешка, загрузившись, подает сигнал: "готово" и ждет ответа на другой волне. Если ответа нет, ждет дальше. Если в ответ "поехали", то поехали.

etc
25.04.2007, 22:02
Что мешает проверять onStatus у LocalConnection?

Izoniz
26.04.2007, 04:21
а с кого мне устанавливать конект? например с того который первый загрузиться. тогда он делает конект и проверяет загрузилься полностью или нет. и потом начнет проигрываться. я только не пойму, что написать в тот файл который будет грузиться и который мы будем проверять...

вот все что нашел.
для проверки статуса:
sendingLC = new LocalConnection();
sendingLC.onStatus = function(infoObject)
{
if (infoObject.level == "error")
{
trace("Connection failed.");
}
}
sendingLC.send("receivingLC", "methodName");

получатель:
var incoming_lc:LocalConnection = new LocalConnection();
incoming_lc.connect("lc_example");
incoming_lc.methodToExecute =
function(param:String):Void { sentMessage_txt.text = param; };

посылатель:
var outgoing_lc:LocalConnection = new LocalConnection();
send_btn.onRelease =
function(Void):Void { outgoing_lc.send("lc_example", "methodToExecute", userMessage_txt.text);};

как это в кучу сбить?
просто у меня и получатель и посылатель один...

походу нужно узнать началься ли 1 кадр в боьшем мувике и если да то больший мувик должен сказать меншему что б тот тоже начал первый кадр....запутано...

нашел что надо...изучаю - http://www.flashgroup.net/forum/archive/index.php?t-3178.html

чет не выходить. взял вот это
stop();
_level0.onEnterFrame = function () {
a = _level0.getBytesLoaded();
b = _level0.getBytesTotal();
if (a == b) {
delete this.onEnterFrame;
dasconnection = new LocalConnection ();
dasconnection.send("mb", "start");
_global.set_up_connections();
_root.anm_mc.gotoAndPlay(2);
}
};

_global.set_up_connections = function () {
dasconnectionA = new LocalConnection ();
dasconnectionA.gotofarm = function (param) {
_root.anm_mc.gotoAndPlay(param);
};
dasconnectionA.startover = function () {
_root.anm_mc.gotoAndPlay(2);
};
dasconnectionA.connect("mb2");
};
вставил в 1 мувик, который быстрее гурзиться. и в нем муви клип сделал инстант нейм "anm_mc"

потом этот код вставил во второй мувик, который дольше грузиться
stop();
dasconnection = new LocalConnection ();
dasconnection.start = function () {
_root.anm_mc.gotoAndPlay(2);
};
dasconnection.connect("mb");
_global.sendframe = function (parameter) {
dasconnection.send("mb2", "gotofarm", 2);
};
_global.startover = function () {
dasconnection.send("mb2", "startover");
};
не пашет. пробовал еще кое что, все не пашет. что не так?

iNils
26.04.2007, 05:29
Izoniz, достаточно нажать кнопку http://www.flasher.ru/forum/images/russian/style3/buttons/edit.gif в последнем сообщении и отредактировать его, а не создавать новые.

etc
26.04.2007, 13:18
Простыню кода не читал, но проверка очень простая — если error, шлем запрос ещё раз, скажем, через 100 мс. Как только error исчезнет — можно играть. Естесственно в ролике, который опрашиваем, должен быть коннект.

Kikasso
26.04.2007, 14:10
По-моему, оба ролика должны подавать сигналы друг другу. Не факт, что тот, который меньше весит, столько и будет весить после переделки, и не факт, что он первым загрузится. По мне каждый ролик по готовности подает сигнал на волне соседа. Если ответа не слышит, error, ждет команды от того. Два LocalConnection.

etc
26.04.2007, 14:12
Одного достаточно. Один из роликов ждет получения команды, а второй проверяет статус. При успешном статусе и получении команды оба начинают играть. И неважно, какой из двух первым загрузился.

Izoniz
26.04.2007, 21:45
я спрашивал что не так делаю...а тут ответы хм...((

я ж там нашел пример точно такого действия как мне надо. только там пашет а у меня нифига... вот я и спрашиваю что не так? можент я мувику не тому присваиваю нейм или ваще не в тот .свф ставлю код?

Kikasso
26.04.2007, 22:52
Одного достаточно. Один из роликов ждет получения команды, а второй проверяет статус. При успешном статусе и получении команды оба начинают играть. И неважно, какой из двух первым загрузился.
Один проверяет, если нет, то ждет и проверяет, потом ждет и проверяет и т.д, скажем 10 раз в сек.
Мой вариант: загрузился, подал сигнал. Если нет, значит я первый, сижу и жду. Второй загрузился, подал сигнал. Если да, поехали оба. Если нет, значит я первый - см. выше. Нет периодически вызываемой функции.
мувик1:

var incoming_lc:LocalConnection = new LocalConnection();
incoming_lc.connect("lc_1");
incoming_lc.readyAndGo = function(){ _root.play(); };
var outgoing_lc:LocalConnection = new LocalConnection();
outgoing_lc.onStatus = function(infoObject){
if (infoObject.level == "status") _root.play();
}
outgoing_lc.send("lc_2", "readyAndGo" );мувик2:

var incoming_lc:LocalConnection = new LocalConnection();
incoming_lc.connect("lc_2");
incoming_lc.readyAndGo = function(){ _root.play(); };
var outgoing_lc:LocalConnection = new LocalConnection();
outgoing_lc.onStatus = function(infoObject){
if (infoObject.level == "status") _root.play();
}
outgoing_lc.send("lc_1", "readyAndGo" );
так примерно. Писал на коленке, use at you own risk
Что называется, найдите в коде 3 отличия))

etc
27.04.2007, 01:25
Бессмысленно определять, кто первый. Зачем?

Kikasso
27.04.2007, 03:54
Бессмысленно определять, кто первый. Зачем?
Чтобы эфир не засорять. И интервалы не сажать. Только два сигнала.
И код отличается только двумя параметрами - идентификаторами LC.
Можно эти параметры передавать через FlashVars. Проще.
Если мувиков 3 и больше тут - можно и подумать. Хотя можно по кругу сигнал передавать..

etc
27.04.2007, 13:20
Гм, не понимаю. Один LC стучится до другого, пока не достучится. Как достучался, и первый и второй пускают воспроизведение. Лично я бы сделал именно так. Достаточно односторонней связи.

Aziz Zaynutdinoff
27.04.2007, 15:02
А если так:
по умолчанию оба мувика на стопе. Создаём слушатель-каунтер, который проверяет равно ли кол-во загруженных клипов общему числу загружаемых. Грузим их через MovieClipLoader и на метода onLoadInit() передаём на слушателя я загрузился «я загрузился – увеличивай число загруженных». Как только число загруженных == числу загружаемых, пробегаемся по всем мувикам перебором и стартуем их.

В этом случае можно запускать не два, а более.

Molecula
27.04.2007, 15:26
Лучше одностороння.
Если мува три и больше - лучше что бы маленький стучался к большим, пока не откроют. Когда команда в сборе (т.е. переменная = количеству мувов) то все едут играть в футбол.

Или попробуйте на примере с пивом.
Нужно что бы 11 человек собрались и выпили пиво.
Один начинает и собирает всех.

etc
27.04.2007, 15:37
Задачи о множественной загрузке роликов не стояло.

Kikasso
27.04.2007, 16:34
Гм, не понимаю. Один LC стучится до другого, пока не достучится. Как достучался, и первый и второй пускают воспроизведение. Лично я бы сделал именно так. Достаточно односторонней связи.
Да вот именно, мне его просто жалко, что он бедный стучится - стучится, а ему никто не отвечает. Так стукнул раза, никто не отозвался - ну, ждем сигнала с другой стороны. Даешь равноправие мувиков! :mad:
загрузился «я загрузился – увеличивай число загруженных». Как только число загруженных == числу загружаемых, пробегаемся по всем мувикам перебором и стартуем их.

«я загрузился – увеличивай число загруженных и я жду ответа на такой-то волне»

Izoniz
28.04.2007, 14:17
Один проверяет, если нет, то ждет и проверяет, потом ждет и проверяет и т.д, скажем 10 раз в сек.
Мой вариант: загрузился, подал сигнал. Если нет, значит я первый, сижу и жду. Второй загрузился, подал сигнал. Если да, поехали оба. Если нет, значит я первый - см. выше. Нет периодически вызываемой функции.
мувик1:

var incoming_lc:LocalConnection = new LocalConnection();
incoming_lc.connect("lc_1");
incoming_lc.readyAndGo = function(){ _root.play(); };
var outgoing_lc:LocalConnection = new LocalConnection();
outgoing_lc.onStatus = function(infoObject){
if (infoObject.level == "status") _root.play();
}
outgoing_lc.send("lc_2", "readyAndGo" );мувик2:

var incoming_lc:LocalConnection = new LocalConnection();
incoming_lc.connect("lc_2");
incoming_lc.readyAndGo = function(){ _root.play(); };
var outgoing_lc:LocalConnection = new LocalConnection();
outgoing_lc.onStatus = function(infoObject){
if (infoObject.level == "status") _root.play();
}
outgoing_lc.send("lc_1", "readyAndGo" );
так примерно. Писал на коленке, use at you own risk
Что называется, найдите в коде 3 отличия))

не пашет

или может я че ни так делаю...раскажите подробнее

Kikasso
28.04.2007, 16:54
Ну еще stop() добавить стоит, а так только что проверил - у меня пашет.

Вот смотри. Открываешь один мувик, он стоит. Открываешь другой - оба поехали. Закрываешь любой - второй доиграет до 1 кадра и застрянет, пока первый снова не откроешь.

Мувики постепенно "разбегаются", ну так немного покумекать.. gotoAndPlay вместо play поставить например.. Если это вообще нужно.

Izoniz
28.04.2007, 17:30
ну стоп я добавлял. а открывание у меня на страничке происходить. снчала 1 грузиться и по идее должен ждать второй но почему-то не ждет. счас твой исходник поковыряю...

Kikasso
28.04.2007, 17:40
Поставь все это после загрузки. Видимо, флешка еще не загрузилась целиком, а коннект уже установлен.

Izoniz
28.04.2007, 17:53
просто мистика...сначала открыл твои свф файли все пошло. потом пробовал себе такое ничего не получилось. потом опять решил открыть твои свфки и уже они не хотят играть. откравыю одну-вторую стоят на 1 и все....

такой вопрос - lc_1 и lc_2 это названия файлов. оно по названию файлов берет или еще где-то прописано - lc_1 и lc_2?

iNils
28.04.2007, 17:55
По скольку Izoniz проигнорировал мое замечание (http://www.flasher.ru/forum/showpost.php?p=636735&postcount=9), то получает плюс.

Izoniz
28.04.2007, 18:27
По скольку Izoniz проигнорировал мое замечание (http://www.flasher.ru/forum/showpost.php?p=636735&postcount=9), то получает плюс.
я не проигнорировал. я просто из-за глюка конекта запостил два месседжа и решил один подредактировать так как удалить его нельзя.

а профтыкал...можно удалять. сорри

Kikasso
28.04.2007, 19:38
просто мистика...сначала открыл твои свф файли все пошло. потом пробовал себе такое ничего не получилось. потом опять решил открыть твои свфки и уже они не хотят играть. откравыю одну-вторую стоят на 1 и все....

такой вопрос - lc_1 и lc_2 это названия файлов. оно по названию файлов берет или еще где-то прописано - lc_1 и lc_2?
Внутри прописано.
Закройте все swf. Слушает волну только тот, кто первый подключился.

Izoniz
28.04.2007, 20:58
Внутри прописано.
Закройте все swf. Слушает волну только тот, кто первый подключился.
да я понял что в нутри прописано. вот и спрашиваю в коде написано - lc_1 значит скрипт ищет lc_1, но где? в имени мувика?

закрыл все перезапустил комп врубаю 1 потом второй и ничего. стоят...

Kikasso
28.04.2007, 21:03
да я понял что в нутри прописано. вот и спрашиваю в коде написано - lc_1 значит скрипт ищет lc_1, но где? в имени мувика?

Да нет, в эфире.. Один мувик слушает волну, на которой второй передает. И наоборот.
У меня все работает. Пример работает. Копайте.

Izoniz
07.05.2007, 02:05
все ок. спасибо!