Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Тормозит анимация при "мультипоточности" (http://www.flasher.ru/forum/showthread.php?t=155444)

Sharkow 04.05.2011 20:28

Тормозит анимация при "мультипоточности"
 
Не придумал, как понятнее назвать тему...
Делаю фотогалерею (Нужен FP 11).
Попробуйте покрутить колесо мыши вниз. Только вниз и только по одному разу: еще не дописал метод с анимацией.
Превьюшки внизу сдвигаются влево, а основная фотка заменяется на следующую.
Проблема в том, что анимация превьюшек тормозит. А происходит это потому, что одновременно с этим заменяется основная фотка - для этого нужно заменить текстуру в Molehill, что занимает время.

К скроллу мыши привязан метод с таким кодом:
Код AS3:

img.source = SHService.imagePaths[displayedIndex];//Грузит фотографию и заменяет текстуру
ts.displayedIndex=displayedIndex;//Запускает анимацию превьюшек

Анимацией занимается TweenMax.
Я надеюсь, эти вещи делаются в разных потоках? Можно ли как-то управлять приоритетом?
Короче говоря, мне надо, чтобы фото грузилось одновременно с анимацией, но анимация не тормозила :]

Надеюсь на вашу помощь, у меня плохие познания флеша) Спасибо.

КорДум 04.05.2011 20:31

Во флеше только один поток. Грузите текстуру, как только прогрузилась, двигайте анимацией.

honest_man 04.05.2011 20:42

Помню и сам расстроился когда узнал что AS однопоточен =(

Sharkow 04.05.2011 20:54

Я понимаю, что управляемый поток во флеше только один.
Но реально там ведь не может быть одного потока О_о Он ведь может грузить файл из интернета, продолжая выполнять метод, например. И анимация нескольких объектов разве может выпоняться при одном потоке?
А как тогда работает мой код? Он же действительно производит анимацию одновременно с загрузкой фотографии.

gloomyBrain 04.05.2011 21:12

Твины отрабатывают по Event.ENTER_FRAME или по таймеру

Sharkow 04.05.2011 21:25

Это понятно, но не может происходить одновременно твин с загрузкой фотки в одном потоке.

gloomyBrain 04.05.2011 21:42

Цитата:

но не может происходить одновременно твин с загрузкой фотки в одном потоке
То есть, Вас не устраивает такой вариант? или Вы не верите, что это так? =)
Когда происходит dispatchEvent, событийный объект попадает в некоторую очередь в недрах плеера. Основной поток плеера проходит эту очередь и выполняет связанный с ней код. Равно как и не связанный. Строго по одному.
- Что у нас там в задачах - ага, скопировать кусок памяти отсюда до сюда. ок, копируем
- Что еще осталось? ага, покрутить прелоадер. Ну и твин заодно проапдейтим

Sharkow 04.05.2011 22:19

Не понимаю...вот допустим, работает в коде некий цикл. И диспатчится какой-нибудь ENTER_FRAME.
Уже не понятно, кто будет производить dispatchEvent, если поток занят циклом. А потом этот поток прекратит выполнять цикл и покрутит прелоадер?
Это похоже на некую "эмуляцию" многопоточности. Не буду просить лекций по этой теме :) Я нашел кое-какой материал, но сложновато для меня.

Как тогда GC работает, тоже не понятно.
Еще, скажем, во встроенной анимации во Flex можно задать свойство suspendBackgroundProcessing, чтобы анимация была более гладкой. И всё в одном потоке?..

honest_man 04.05.2011 23:40

Цитата:

И всё в одном потоке?
Да. Код выполняется строго по очереди. К чему это отрицание?

Bgg 04.05.2011 23:42

Человек видимо не верит, что современный процессор настолько быстро работает, и что в одном потоке можно столько всего сделать.

gloomyBrain 04.05.2011 23:57

Цитата:

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

Sharkow 04.05.2011 23:59

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
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.