![]() |
Тормозит анимация при "мультипоточности"
Не придумал, как понятнее назвать тему...
Делаю фотогалерею (Нужен FP 11). Попробуйте покрутить колесо мыши вниз. Только вниз и только по одному разу: еще не дописал метод с анимацией. Превьюшки внизу сдвигаются влево, а основная фотка заменяется на следующую. Проблема в том, что анимация превьюшек тормозит. А происходит это потому, что одновременно с этим заменяется основная фотка - для этого нужно заменить текстуру в Molehill, что занимает время. К скроллу мыши привязан метод с таким кодом: Код AS3:
Я надеюсь, эти вещи делаются в разных потоках? Можно ли как-то управлять приоритетом? Короче говоря, мне надо, чтобы фото грузилось одновременно с анимацией, но анимация не тормозила :] Надеюсь на вашу помощь, у меня плохие познания флеша) Спасибо. |
Во флеше только один поток. Грузите текстуру, как только прогрузилась, двигайте анимацией.
|
Помню и сам расстроился когда узнал что AS однопоточен =(
|
Я понимаю, что управляемый поток во флеше только один.
Но реально там ведь не может быть одного потока О_о Он ведь может грузить файл из интернета, продолжая выполнять метод, например. И анимация нескольких объектов разве может выпоняться при одном потоке? А как тогда работает мой код? Он же действительно производит анимацию одновременно с загрузкой фотографии. |
Твины отрабатывают по Event.ENTER_FRAME или по таймеру
|
Это понятно, но не может происходить одновременно твин с загрузкой фотки в одном потоке.
|
Цитата:
Когда происходит dispatchEvent, событийный объект попадает в некоторую очередь в недрах плеера. Основной поток плеера проходит эту очередь и выполняет связанный с ней код. Равно как и не связанный. Строго по одному. - Что у нас там в задачах - ага, скопировать кусок памяти отсюда до сюда. ок, копируем - Что еще осталось? ага, покрутить прелоадер. Ну и твин заодно проапдейтим |
Не понимаю...вот допустим, работает в коде некий цикл. И диспатчится какой-нибудь ENTER_FRAME.
Уже не понятно, кто будет производить dispatchEvent, если поток занят циклом. А потом этот поток прекратит выполнять цикл и покрутит прелоадер? Это похоже на некую "эмуляцию" многопоточности. Не буду просить лекций по этой теме :) Я нашел кое-какой материал, но сложновато для меня. Как тогда GC работает, тоже не понятно. Еще, скажем, во встроенной анимации во Flex можно задать свойство suspendBackgroundProcessing, чтобы анимация была более гладкой. И всё в одном потоке?.. |
Цитата:
|
Человек видимо не верит, что современный процессор настолько быстро работает, и что в одном потоке можно столько всего сделать.
|
Цитата:
|
Bgg,
Нет, я прекрасно знаю, что потоки в винде образуются тоже в основном быстрым переключением между процессами, а действительно параллельных потоков не может быть больше, чем ядер у CPU... Я говорю о том, как выполняется код. Если есть только один поток, то пока не выполнится текущий метод, некому слушать события, грузить image.source из интернета в бэкграунде, собирать мусор и так далее. Некому не всмысле железа, а всмысле самого flash-ролика. Вот это не понятно. Хотя в моей флешке я понял. Там действительно анимация вообще замораживается, пока заменяется текстура. Сначала этого не заметил. gloomyBrain, да, более-менее прояснили. Спасибо. |
| Часовой пояс GMT +4, время: 17:25. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.