![]() |
Задержка в цикле
Такой вопрос, как правильно использовать setInterval в цикле, и в какое время производить очистку? Необходимо, чтобы в цикле выполнялась какая-то функция и задержка перед следующим шагом. Впрочем, если это покажут с помощью SetTimeout, никаких претензий, лишь бы было видно работу задержек)
|
Код AS3:
|
Хотелось бы тоже так хитрить, ну или скажем этак:
Код AS3:
Спасибо |
Флеш плеер работает с одним thread'ом. Поэтому, если бы можно было остановить выполнение (например, с помощью delay), то вы бы остановили полностью флеш (включая прорисовку), а не только свой код (это можно было бы обойти используя синхронизацию, но она слишком усложняет модель, поэтому в скриптах практически не используется).
Флеш построен по модели событий, вот их и используйте. |
я уже использовал слушатель, но ориентировать подобный метод на циклы for и foreach не получается, вообще говоря, я подумываю о реализации через setInterval или setTimeout, но пока что моих навыков не хватает, что бы его вовремя ставить и вовремя чистить в цикле, поэтому я и прошу помощи в данном вопросе. Теперь о delay. Да, можно много размышлять на тему о том, как работает флэш, и как это непохоже на базовые языки программирования, но задержка выполнения конкретной функции это же не новость (собственно setInterval и setTimeout именно этим и занимаются), так почему бы их не использовать в решении таких проблем? Нет, может, конечно, для вас это и не кажется сложным, но пока примеров нужного мне кодя я не нашел.
|
>> но пока примеров нужного мне кодя я не нашел
и врядли найдешь, поскольку абсолютно чуждо это флешу реализовать то, что ты хочешь, не сложно, но реально это не имеет смысла, почему - уже объяснил ZlPredator Код AS3:
|
Так, давайте-ка проясним еще раз чего я хочу, и что мне объясняют. Т.е. задержка функции в циклах for и foreach, это по вашему "абсолютно чуждо флэшу"? Проще говоря никто так не делает? А как тогда программы пишут, я не пойму? Или вы к допотопному delay прицепились, и не поняли, что от вас человек хотел?)
|
"абсолютно чуждо флэшу" -Да; обновление экрана не произойдет, пока не выполнится последняя строка кода.
|
не поняли, значит..
еще раз: можно либо приостановить выполнение цикла, застопорив весь плеер при этом, либо запустить какие-то действия с задержкой - при чем здесь тогда цикл не очень ясно, хотя можно, канеш, сделать это и в цикле.. |
Если мы будем задерживать выполнение какой-то функции (используем setTimeout/setInterval) в каждом шаге цикла foreach, работа с интерфейсом во время работы цикла будет невозможной?
А если функция рисует какой-то граф. примитив, то программа нам не будет показывать прорисовку этих примитивов друг за другом с задержкой, а выдаст конечное изображение? Судя по документации, setTimeout/setInterval для функции не должна влиять на выполнение других функций, не зависимых от неё. Все остальные функции будут выполнятся параллельно с задержкой. Так почему же должны возникнуть проблемы с интерфейсом? Мы же не стопим все) |
На примере for (с помощью setTimeout):
Код AS3:
|
все верно
Если мы будем задерживать выполнение какой-то функции (используем setTimeout/setInterval) работа с интерфейсом и остальная деятельность плеера не нарушится, документация тебя не обманывает :) но вернутся в точку вызова ты уже не сможешь - цикл отработал (запустил с задержкой твои функции) и все.. |
Ну вот и разобрались:) Есть только одна проблема.. получается, задержек в работе цикла не будет. Т.е. функции запустятся, и их выполнение никак не отменить. А как можно задержать цикл перед шагом(в конце предыдущего шага), чтобы функция успела выполниться, но так, чтобы не нагрузить систему(я подумывал о еще одном таймере в функции и while.. от таймера и таймаута, работающих одновременно, комп не будет в шоке, а вот while меня несколько настораживает) Если можно так сделать, то пользователь сможет отменить вычисления, что очень важно, потому как он будет иметь возможность задать скорость счета.
Какие мысли на этот счет? |
по третьему кругу пошло, однако..
циклы for в такой задачке не при делах вовсе см. пример из поста #2, в обработчике таймера(loopBody) меняй задержку следующей итерации, отменяй вовсе или что-там еще нужно в зависимости от действий пользователя или еще каких условий |
http://www.flasher.ru/forum/showpost...74&postcount=6
Тут пример, правда не на as3, разноса цикла по кадрам. |
| Часовой пояс GMT +4, время: 20:58. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.