Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   getBytesTotal()? (http://www.flasher.ru/forum/showthread.php?t=34718)

Nob 20.07.2002 01:57

getBytesTotal()?
 
Всем привет!

В продолжение разговора(?)о внешних загружаемых мувах.
Скажем, на кнопку подвшена загрузка мува в клип-контейнер на level0: _root.mh

on(release) {
loadMovie("my.swf","_root.mh");
...
//define file size
with (_root.mh) {
total=getBytesTotal();
}
}

Однако вызов getBytesTotal() как в скрипте подвешенном на кнопку (см. выше), так и в обработчике контейнера _root.mh, куда фильма грузится, показывает не реальный размер, а какое-то малое число, например 12. Связано ли это с тем, что реально в момент вызова загрузка еще не началась? Если дело в этом, то как отловить факт начала загрузки?
Сразу оговорюсь, что
1. ресурс качается с сервера;
2. в основной сцене все лежит в одном кадре (так нужно - просто все написано на AS в стиле системы с диспетчеризацией событий и с-ма крутится в цикле в 1 кадре).
Знакомая проблема?

NeX 20.07.2002 02:42

А ты у чего, собственно говоря, измеряешь getBytesTotal()?.. У кнопки?..

Nob 20.07.2002 03:02

Да, нет же, конечно не у кнопки, а у клипа-контейнера -root.mh, куда мой внешний мув грузится (см. код в первом письме). Однако, почитал я найденное в поиске и ... ясно, что та еще функция getBytesTotal. Кстати, может проблема в том, что swf, который я гружу всего из 1 кадра
(просто растр). Сейчас проверю что-нибудь еще.

NeX 20.07.2002 03:11

Упс... да, это я как всегда невнимательно смотрю... а вообще в 1 строчке with использовать не в тему... А чтобы легче тебе было помогать, дай исходник, там и посмотрим...

Nob 20.07.2002 04:02

Вложений: 1
Спасибо за участие.
Вот собственно фрагмент кода-болванки (пришлось слепить на ходу выдрав из системы) - фактически просто комбинация клипа-контейнера и прелоадера с тестовыми полями. Похоже, что все замечательно работает, я имею ввиду getBytesTotal, когда вызов стоит в самом муве (см. многочисленные исходники прелоадеров на форуме).
Что до with, то тут просто дельфийско-паскалевская привычка экономного письма.

NeX 20.07.2002 04:55

Ну ты и написал.... У меня аж перегрев случился... ;)

На самом деле, че тебе надо то?.. Я сначала думал, что понимаю, а когда пример посмотрел, то стал сомневаться...

Я понял так - при нажатии на кнопку тебе надо начать грузить мув в мув и при этом выводить статистику по загрузке, так?..

NeX 20.07.2002 05:16

Все, короче, просек я твою фишку... Блин, голова совсем под вечер не варит... Еще на диско идти... Кошмар...

Ладно, к делу:

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

Посему, решение такое - стирай все, что ты там написал :p , и _root.mh.getBytesTotal(); пихай на _root.onEnterFrame в первый кадр (собственно, единственный)... туда же пихай всякие там процентов рассчет и т.п. Так все работает...

Кстати, ты че мне сказал, что мув - это растр... я с трудом услышал это пищани... Только благодаря тому, что бук у меня на коленях... Так сказать, внутренним ухом уловил... ;)

Если не работает (хотя этого не может быть), или че-то не подходит, дай знать...

Nox Noctis 20.07.2002 15:35

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

зы: встретились как-то Nob, Nex и Nox :)))))

Nox Noctis 20.07.2002 15:56

+ фишка еще в том, что гетБайтсЛоадед\Тотал можно опрашивать и у обычных клипов :) в которые ничего не грузится... поэтому если у тебя клип, в который ты грузишь не был пустым, то сначала и тотал и лоадед не будут равны нулю !.. :)

Nob 20.07.2002 17:15

> Nex

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

Конечно на опрос функции требуется время, однако
можно проверять результат, возвращаемый getByteTotal() (звучит абсурдно, но вот статистика опроса - -1; 0; реальный размер), см. код далее, подвешенный на контейнер:

onClipEvent (load) {
this.total=0;
this._NAN_total=-1;
_root.t=total;
}

onClipEvent (enterFrame) {
// Это, если лениво каждый раз опрашивать размер
if ((total <> NAN_total) || (total = 0)) {
NAN_total=total;
total=getBytesTotal();
_root.t="total is "+total
};
// Опрос в каждом frame'е
// total=getBytesTotal();
// _root.t="total is "+total

_loaded=getBytesLoaded();
this.pt=_loaded;
}

Фильма с растром была из 1 кадра, вот я и положил sound, что под руками было.

P.S. Это ты хорошо заметил, насчет внутреннего уха... ;)

> Nox Noctis

1. С фишкой все ясно - any clip все равно ведь грузился, вне зависимости, обрабатывал ты событие load или нет.

2. Опрашивать "каждый раз" можно и все конечно будет работать, но ...
2.1. Существует алгоритмическое программирование
2.2. Когда суммарный AS тянет на 40-50 Kb, слоев и клипов на сцене немерено и диспетчер все это шарит... вопрос вызова может стать критичным. Хотя, кто знает?
(Сейчас обвинят в sNobизме. Шутка.)

Так что, все работает в клипе и вне его. Спасибо ребята. Топику конец. Надеюсь, что не знакомству.
Закончу, кину link, если интересно.

Удачи всем!


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

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