Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Отключение флеш при не активной вкладке! (http://www.flasher.ru/forum/showthread.php?t=149271)

Angelinka 21.01.2011 20:12

Отключение флеш при не активной вкладке!
 
Ребята, умоляю Вас, помогите мне! :o
Дело вот в чем. Я пишу приложение на флеш, это очень серьезная заказ для меня. Я писала его около 2-х месяцев и вот, когда почти все уже готово заказчики столкнулись с катастрофической проблемой. Приложение должно работать онлайн. И у одного и у второго пользователя должно быть на экране то же самое. Но вот в чем дело:
Когда встраиваешь флеш на страницу браузера и переходишь на другую вкладку, оставляю вкладку с флешкой не активной - то та флешка перестает работать, ставиться на паузу. Это ведет к тому, что пользователи видят разные вещи и разный порядок происходящего. Заказчики сказали чтобы я исправила эту проблему иначе они откажутся :( Я столько долго работала над этой работой! Пожалуйста, помогите мне найти выход, облазила уже все, что можно. Надежда угасает...

NikolyA 21.01.2011 20:24

нужно отслеживать когда курсор вышел за пределы флеша, и ставить на паузу приложение, не знаю как в AS2, но в AS3 этот вопрос с примером был рассмотрен: http://flasher.ru/forum/showpost.php...8&postcount=91

во, вроде для AS2 нашел: http://actualwave.com/blog/?p=24

rainbowrussia 21.01.2011 20:57

Я так понял у ТС обратная проблема - остановка ролика на неактивной вкладке.
У мена аналогично есть ролики, которые даже находясь на активной вкладке (внизу, за пределами экрана) даже не начинают проигрываться, пока их не видно (правда я не разбирался, почему, сейчас похоже этот глюк пропал - вероятно от версии флеш плеера зависит).
ТС, это происходит в любом браузере или в каком-то конкретном?

Division 21.01.2011 21:16

Если не удастся победить "паузу", возможно стоит подумать над более грамотной синхронизацией?
Чтоб юзеры видели одно и тоже вне зависимости от "пауз".

mooncar 21.01.2011 21:28

Angelinka, прежде всего используйте для публикации флешки режимы wmode="opaque" или "transparent" (если нужен прозрачный фон). Это если у вас (у заказчиков) сейчас стоит "window". Это влияет на работу флешки в неактивной вкладке.
С ними паузы скорее всего не будет.

А вообще конечно, как здесь говорили, синхронизация не должна зависеть от разных факторов - например от скорости процессоров разных компов, т.е. скорости работы флеш-плагина.

Angelinka 22.01.2011 05:09

TO NikolyA:
Большое спасибо, если ничего не поможет - придется сделать так. :(

Добавлено через 1 минуту
Цитата:

Сообщение от rainbowrussia (Сообщение 966699)
Я так понял у ТС обратная проблема - остановка ролика на неактивной вкладке.
У мена аналогично есть ролики, которые даже находясь на активной вкладке (внизу, за пределами экрана) даже не начинают проигрываться, пока их не видно (правда я не разбирался, почему, сейчас похоже этот глюк пропал - вероятно от версии флеш плеера зависит).
ТС, это происходит в любом браузере или в каком-то конкретном?

В любом браузере. Я узнавала на американских форумах - это зависит от флеш плеэра. 10 плеэр и выше останавливают ролики если те не активны :(

Добавлено через 2 минуты
Цитата:

Сообщение от Division (Сообщение 966704)
Если не удастся победить "паузу", возможно стоит подумать над более грамотной синхронизацией?
Чтоб юзеры видели одно и тоже вне зависимости от "пауз".

Да, но как? В этом весь вопрос :(

Добавлено через 3 минуты
Цитата:

Сообщение от mooncar (Сообщение 966707)
Angelinka, прежде всего используйте для публикации флешки режимы wmode="opaque" или "transparent" (если нужен прозрачный фон). Это если у вас (у заказчиков) сейчас стоит "window". Это влияет на работу флешки в неактивной вкладке.
С ними паузы скорее всего не будет.

А вообще конечно, как здесь говорили, синхронизация не должна зависеть от разных факторов - например от скорости процессоров разных компов, т.е. скорости работы флеш-плагина.

Да, да, про wmode я тоже читала на американских форумах, но, к сожалению, не помогает :( По крайней мере в фаерфоксе так точно. :(

Да, но вот опять таки, как создать такую синхронизацию? :(

NikolyA 22.01.2011 05:40

Angelinka тогда придется апгрейдить под 10-ку и если проект на AS2 написан, то чтоб уважить клиента придется под AS3 переписывать

dark256 22.01.2011 11:00

Angelinka

у вас события к чему привязаны? onEnterFrame? Повесьте его на setInterval - на таймер.
вот тут http://vkontakte.ru/app1858588 - писк таймера повешен на setInterval, в бэкграунде и закрытх вкладках - пищит....

По карйней мере ДОЛЖЕН пищать :)

Angelinka 22.01.2011 14:39

Цитата:

Сообщение от NikolyA (Сообщение 966781)
Angelinka тогда придется апгрейдить под 10-ку и если проект на AS2 написан, то чтоб уважить клиента придется под AS3 переписывать

Так как раз 10-ка и тормозит флешку на другой вкладке. Предыдущие версии плеэра себя ведут нормально.

Добавлено через 2 минуты
Цитата:

Сообщение от dark256 (Сообщение 966793)
Angelinka

у вас события к чему привязаны? onEnterFrame? Повесьте его на setInterval - на таймер.
вот тут http://vkontakte.ru/app1858588 - писк таймера повешен на setInterval, в бэкграунде и закрытх вкладках - пищит....

По карйней мере ДОЛЖЕН пищать :)

Да, такой вариант тоже находила, но.. У меня там столько кода.. Повесить все на интервалы - это значит все переписать. Но хоть в чем-то спасение но есть.. Думаю, буду делать именно так, если ничего больше не поможет. Большое спасибо всем за помощь, если будут еще идеи, пожалуйста, напишите.

rainbowrussia 22.01.2011 21:46

У меня сейчас тоже 10й плеер стоит, но никак не могу добиться от него замирания флешки на неактивной вкладке, по-этому только в теории - можно попробовать создать один setInterval в котором вызывать updateAfterEvent(), еще можно попробовать запустить звук (тишину, но маловероятно что поможет).

lunariusis 22.01.2011 23:05

Прочитайте про версию 10.1 там четко написано что это новая фича у плейера, так борятся с нагрузкой на проц в Adobe. И еще если есть фоновый звук тогда флешка не стопится, не проверял на счет звука, но без звука стопится 100%

Angelinka 22.01.2011 23:32

Цитата:

Сообщение от lunariusis (Сообщение 966908)
Прочитайте про версию 10.1 там четко написано что это новая фича у плейера, так борятся с нагрузкой на проц в Adobe. И еще если есть фоновый звук тогда флешка не стопится, не проверял на счет звука, но без звука стопится 100%

Придурки эти адобовцы! Раз уж сделали такую фигню то сделали бы и возможности ее обойти! Нужно учитывать все нюансы при внедрении таких решений. Со звуком как-то странно, приложение не останавливается полностью, а замедляется немного.. К сожалению, полностью это проблему не решит. Скорее всего придется все переписывать под интервалы :( Хотя, в этом же описании написано что интервалы тоже замедляются :(

rainbowrussia 23.01.2011 03:28

Вообще исходя из задачи ("И у одного и у второго пользователя должно быть на экране то же самое.") вроде бы следует что всей обработкой данных должен заниматься сервер, а у клиентов должно идти только отображение, которое не зависит от скорости выполнения флеша или частоты кадров. Может быть вы перемудрили чего, и не все так страшно.

Angelinka 23.01.2011 21:46

Цитата:

Сообщение от rainbowrussia (Сообщение 967007)
Вообще исходя из задачи ("И у одного и у второго пользователя должно быть на экране то же самое.") вроде бы следует что всей обработкой данных должен заниматься сервер, а у клиентов должно идти только отображение, которое не зависит от скорости выполнения флеша или частоты кадров. Может быть вы перемудрили чего, и не все так страшно.

Это система боя для онлайн игры. Баталии происходят во флеше. Нужно чтобы и одного и у второго пользователя отображался один исход баталий. Даже если у кого-то процессор работает медленнее - на исход боя это не должно влиять, так как бой окончиться просто чуть позже, чем у второго игрока, но главное чтобы результат был один = кто-то выиграл, второй проиграл. А с этой проблемой получается что исход нарушается :(

rainbowrussia 23.01.2011 22:03

Так это делается иначе - игроки производят некоторые действия, действия отправляются на сервер, сервер делает обсчет игровой ситуации и выдает всем игрокам текущую ситуацию, которая визуализируется. Примерно так. В противном случае вы никогда не добъетесь 100% идентичных результатов. Хотя бы из-за того, что например функция Math.random (если элемент случайности присутствует) на разных компьютерах дает разные результаты. То есть вы изначально пошли по неверному пути, не изучив основы онлайн игр, имхо.

lunariusis 24.01.2011 11:48

Цитата:

Сообщение от rainbowrussia (Сообщение 967173)
Так это делается иначе - игроки производят некоторые действия, действия отправляются на сервер, сервер делает обсчет игровой ситуации и выдает всем игрокам текущую ситуацию, которая визуализируется. Примерно так. В противном случае вы никогда не добъетесь 100% идентичных результатов. Хотя бы из-за того, что например функция Math.random (если элемент случайности присутствует) на разных компьютерах дает разные результаты. То есть вы изначально пошли по неверному пути, не изучив основы онлайн игр, имхо.

Дополню вас. Если это "реал тайм" то тогда каждый ход обсчитывает/проверяет сервер (для пошаговой, раундовой игры), и сразу же передает клиентам, и тем что не в своем раунде и тем что в своем раунде, плюс обсчитывает ботов. По этому скорее всего фигурки на поле просто перелетят на свои актуальные позиции после перехода на скрытую вкладку, если конечно сделасть синхронизацию хотя-бы на начало каждого полураунда.

Angelinka 24.01.2011 14:42

Цитата:

Сообщение от rainbowrussia (Сообщение 967173)
Так это делается иначе - игроки производят некоторые действия, действия отправляются на сервер, сервер делает обсчет игровой ситуации и выдает всем игрокам текущую ситуацию, которая визуализируется. Примерно так. В противном случае вы никогда не добъетесь 100% идентичных результатов. Хотя бы из-за того, что например функция Math.random (если элемент случайности присутствует) на разных компьютерах дает разные результаты. То есть вы изначально пошли по неверному пути, не изучив основы онлайн игр, имхо.

Я так и сделала... Вот эта ситуация, которая визуализируеться - она визуализируеться по-разному если один из пользователей переключится на другую вкладку... В этом-то и проблема. У одного визуализировалось буд-то он выиграл а на самом деле проиграл. Выходит два победителя - а так быть не может в нашем случае :(

rainbowrussia 24.01.2011 16:20

Цитата:

Сообщение от Angelinka (Сообщение 967407)
Я так и сделала... Вот эта ситуация, которая визуализируеться - она визуализируеться по-разному если один из пользователей переключится на другую вкладку... В этом-то и проблема. У одного визуализировалось буд-то он выиграл а на самом деле проиграл. Выходит два победителя - а так быть не может в нашем случае

Такого быть не может. Если ролик получил данные "я проиграл", и при этом рисует на экране выигрыш - это никак не связано с проблемой остановки ролика. Тем более что они не останавливаются, а лишь замедляются. Склоняюсь к наличию ошибок в алгоритмах.

dark256 25.01.2011 15:21

Коммент.
1. При входе в игру написать, что использовать вкладки нельзя, и откройте флэшку в отдельном окне.
2. Грузить флэшку в попап. При этом они должны быть разблокированы.
Код AS1/AS2:

on (press) 
{
getURL("javascript:NewWindow=window.open('/media/navbar/astradio.html','newWin','width=500,height=90,left=0,top=0,toolbar=No,location=No,scrollbars=No,status=No,resizable=No,fullscreen=No');  NewWindow.focus();    screen_height = window.screen.availHeight; screen_width = window.screen.availWidth; left_point = parseInt(screen_width/2)-(500/2); top_point = parseInt(screen_height/2)-(90/2); setTimeout('NewWindow.moveTo(left_point,top_point)',100); void(0);");
}

Флэшка в отдельном окно - не тормозится.

Angelinka 27.01.2011 16:09

Цитата:

Сообщение от dark256 (Сообщение 967763)
Коммент.
1. При входе в игру написать, что использовать вкладки нельзя, и откройте флэшку в отдельном окне.
2. Грузить флэшку в попап. При этом они должны быть разблокированы.
Код AS1/AS2:

on (press) 
{
getURL("javascript:NewWindow=window.open('/media/navbar/astradio.html','newWin','width=500,height=90,left=0,top=0,toolbar=No,location=No,scrollbars=No,status=No,resizable=No,fullscreen=No');  NewWindow.focus();    screen_height = window.screen.availHeight; screen_width = window.screen.availWidth; left_point = parseInt(screen_width/2)-(500/2); top_point = parseInt(screen_height/2)-(90/2); setTimeout('NewWindow.moveTo(left_point,top_point)',100); void(0);");
}

Флэшка в отдельном окно - не тормозится.

Спасибо за подскажку, но это ведь не совсем решает проблему, мои заказчики на такое не согласяться. Тем более, что окно всегда можно просто свернуть и тогда та же беда..

Добавлено через 5 минут
В общем, ребята, капец полный. Готовлю веревку и мыло, до слез обидно.. Переписывала флешку под интервалы долго и нудно, как мне все посоветовали и флешка все равно стопится. Но я нашла зато наконец официальное заявление от adobe что да как:

SWF is Invisible:
* SWF frame rate is clocked down to 2 frames/sec. No rendering occurs unless the SWF becomes visible again.
* timers (AS2 Interval and AS3 Timers) are clocked down to 2 a second.
* local connections are clocked down to 2 a second.

Получается что все интервалы сбрасываются до 2 выполнений в секунду, а уменя фреймрейт 30 кадров в секунду, 2 явно не хватает. Так же там написано, что если на заднем плане есть звук - то фреймрейт стает 8 кадров в секунду вместо 2. Но 8 кадров для анимации - это даже не смешно..

Вот так вот все печально заканчивается. Я в истерике, жить не хочеться..

Добавлено через 19 минут
Я нашла похожую ситуацию в другой игре, но там разработчики как-то решили эту проблему. Флешка вроде не тормозиться, но нагрузка на ЦП все равно падает если флешка не активна.. Вот ссылка на игру:
http://nonoba.com/wmarsh/starland-multiplayer-td
Если они как-то это сделали... Значит, возможно есть шанс.. :(

rainbowrussia 27.01.2011 19:46

Angelinka, поясните, пожалуйста, как у вас получается "Я так и сделала [игровую ситуацию обсчитывает сервер, клиент ее визуализирует]... ... У одного визуализировалось буд-то он выиграл а на самом деле проиграл.". Ну никак не могу понять. Может не все так плохо и вы просто где-то ошиблись немного в алгоритме.


Часовой пояс GMT +4, время: 18:46.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.