AS, таймаут в выполнении скрипта
190 сообщений
#15 лет назад
Добрый день, уважаемые фрилансеры. Нужна ваша консультация.Экшн скрипт. Есть в одном фрейме большой кусок кода, с циклами, который обсчитывает определенный алгоритм. В теле этого кода везде стоят вызовы некоторой функции. По вызову эта функция вызывает событие onpress на кадре, при этом происходит плавное перемещение некоего рисунка из одной точки в другую, реализованное покадрово, не кодом.
Задача - сделать так, чтобы когда в том большом коде мы натыкаемся на onpress и происходит анимация - в коде возникла пауза и он дальше не обсчитывал ничего, пока анимация не закончится.
Как это сделать?
74 сообщения
#15 лет назад
var timeout:Number = 1000; // в миллисекундах.
setTimeout(function () {
trace("Конец задержки."); // код после задержки....
}, timeout);
Вот так..)
190 сообщений
#15 лет назад
Не помогает))) Мануал уже курили, не вставило.
96 сообщений
#15 лет назад
Сделать булевую переменную, например_global.is_var = true;
Всю "длинную процедуру" поместить в
if (_global.is_var) {
}
В обработчике onPress поставить
_global.is_var = false;
В последнем кадре анимации поставить
_global.is_var = true;
190 сообщений
#15 лет назад
Это практически то же саймое, что и setinterval. Фишка в том, что код у нас выполняется весь полностью во фрейме и только потом просчитывает остальные фреймы. Данный метод приведет к тому, что в том месте где будет проверка if вылетит false (пофакту присвоение true не произойдет) - и цикл выполнится один раз.
185 сообщений
#15 лет назад
Onym, Это не будет работать как надо.
ConceptART,
Переписать процедуру так, что бы она работала по эвентам от таймера, например
и в начале обработки прерывания проверять - выполнять ее или нет.
Да, можно оформить в виде статического класса. А писать в кадрах - плохая идея..
190 сообщений
#15 лет назад
Для варианта с циклом это сложновато реализованно - там тройная вложенность циклов.
96 сообщений
#15 лет назад
В общем случае, как я понял задачу, нужно чтобы при каком-то условии код выполнялся, а в остальных случаях - нет.Алгоритм, который я описал работает так:
- Переменной присваивается начальное значение true (можно добавлять кадр перед основной обработкой и присваивать значение в нем. Важно чтобы в этот начальный кадр скрипт уже не вернулся.)
- Происходит обработка скрипта. В какой-то момент переменной присваивается значение false и запускается анимация.
- При повторном вызове "большого кода" из-за того, что переменная = false, он не выполнится.
- Когда анимация дойдет до последнего кадра, переменной опять будет присвоено значение true и код будет выполняться.
П. С. Это если код в кадрах, а не в классах.
190 сообщений
#15 лет назад
Цитата ("incweb"):Если хорошо подумать - почти всегда можно упростить.
Можно. Пусть будет двояная вложенность. Но это не меняет сути дела. Задача сязана с скажем "поиском кратчайшего пути" - там всеравно будут циклы. Но это не совсем поиск, нечто похожее.
Цитата ("Onym"):
П. С. Это если код в кадрах, а не в классах.
Код в одном кадре. Работать это не будет, потому что сначала выполняется весь код в одном фрейме и только потом передается управление второму. Поэтому там где у вас присвоение true для продолжения выполнения кода - это произойдет после того, как мы уже выйдем из фрейма с логикой. Работать на практике не будет, проверили в первую очередь.
Поправьте меня если я не прав.
190 сообщений
#15 лет назад
Программа в кадре. В одном кадре. Анимация - покадровая, не программное перемещение по координатам.
96 сообщений
#15 лет назад
Вариант при анимации в кадрах такой:есть 3 кадра:
1) Присвоение начальных значений.
2) Основная обработка информации (с меткой например "label1"

3) Переход по условию или без условий в кадр с основным расчетом. Например так:
if (!next_ani) {gotoAndPlay("label1")}
или без условий
gotoAndPlay("label1")
96 сообщений
#15 лет назад
Раз анимация покадровая, значит в анимации (в символе, который размещается на основной сцене) несколько кадров.И почти наверняка в первом кадре в каком-то слое стоит stop().
Или анимация останавливается программно в кадре с основными расчетами.
Вот в этом символе в конце анимации можно поставить присвоение значения переменной.
Как вариант можно условие поменять на такое:
if(_global.is_var == undefined) {_global.is_var = true}
if ((_global.is_var)||(ani_mc._currentframe == ani_mc._totalframes)) {
_global.is_var = true;
// большой код
}
Здесь ani_mc - это символ с анимацией
Upd:
И в этом случае можно обойтись одним кадром а не тремя
2206 сообщений
#15 лет назад
Вот как раз хороший пример того, почему люди пишут классами, а не в таймлайне 
96 сообщений
#15 лет назад
Мне сказали "Есть кусок кода в фрейме" - я фреймы и ковыряю.Upd
С классами в этом вопросе проще - поставил присвоение всего чего нужно в конструкторе класса и все.
Upd2
И, кстати, судя по
"в том большом коде мы натыкаемся на onpress"
Это АС2.
190 сообщений
#15 лет назад
ДА, к сожалению код не на классах, на AS2. Спасибо, удалось решить проблему немного другим способом - алгоритм сначала рассчитал ходы, занося их в массив, а потом между кадрами потасовался эотт массив для выполнения.
185 сообщений
#15 лет назад
Цитата ("ConceptART"):Цитата ("incweb"):Если хорошо подумать - почти всегда можно упростить.
Можно. Пусть будет двояная вложенность. Но это не меняет сути дела. Задача сязана с скажем "поиском кратчайшего пути" - там всеравно будут циклы. Но это не совсем поиск, нечто похожее.
Цитата ("Onym"):П. С. Это если код в кадрах, а не в классах.
Код в одном кадре. Работать это не будет, потому что сначала выполняется весь код в одном фрейме и только потом передается управление второму. Поэтому там где у вас присвоение true для продолжения выполнения кода - это произойдет после того, как мы уже выйдем из фрейма с логикой. Работать на практике не будет, проверили в первую очередь.
Поправьте меня если я не прав.
Более конкретно обрисуйте задачу. Можно в личку. Поиск пути можно по разному делать. может помогу чем.
Цитата ("Pixorama"):
Вот как раз хороший пример того, почему люди пишут классами, а не в таймлайнеЕсли мануал не вставил, есть предложение покурить книгу Колина Мука Essential Action Script 3.0. Говорят даже на русском языке есть.
Книга хорошая, но только азы. Много вопросов оставлено за кадром.
190 сообщений
#15 лет назад
Да с алгоритмом проблем нет вобщемто) Спасибо, уже решили вопрос.