PDA

Просмотр полной версии : Как замедлить выполнение скрипта.


Finve
11.03.2007, 14:44
Раньше я ни чего не писал на АС а тут вот взялся написать игрушку, и столкнулся с несколькими проблемами одной из них стала замедление выполнения скрипта. В любом другом языке программирования если где то требуется вставить паузу в вычислениях это делается с помощью пустого цикла, но во флеше этот прием не срабатывает. Точнее срабатывает лишь один раз, а если используется цикл внутри цикла, то ни чего не получается.

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

Вопрос как вставить прогрммную паузу, если все происходит в одном кадре?

techno
11.03.2007, 14:49
через setInterval:
setInterval(функция, инетервал мс, параметры функции)

BigDan
11.03.2007, 15:07
Вот исходник (http://flasher.ru/forum/attachment.php?attachmentid=15739&d=1163182597) движения клипа.

Finve
11.03.2007, 15:16
возьмем простой скрипт:

for (i=0; i<10; i++) {
n++;
trace(n);
}

Как правильно вставить setInterval чтоб каждое новое сообщение вызывалось через 1 сек?
А то я что не делаю, а в результате получается не тот который хочу. вот к примеру если так:
n=0;
function Intervall (){
n++;
trace (n);
}
for (i=0; i<10; i++){
setInterval(Intervall, 1000);
}

Получаю, бесконечное числов циклов, по 10.

etc
11.03.2007, 15:28
Finve, свой код нужно оформлять тегами CODE. Оформите, как полагается.

BigDan
11.03.2007, 15:29
в конце function Intervall пропиши clearInterval(.....).

this.create
11.03.2007, 15:31
В любом другом языке программирования если где то требуется вставить паузу в вычислениях это делается с помощью пустого цикла, Это плохой прием. Скорость работы цикла зависит от текущей производительности ПК, следовательно ваша "пауза" будет неодинакова для разных ПК и к тому же будет уменьшаться с развитием компьютеров(ростом их мощности). В результате вы получите программу, скорость которой будет расти во времени( что иногда и наблюдается).
Используйте для паузы элементы которые определяют именно задержку по времени, напр. setInterval.

this.create
11.03.2007, 15:53
function mess():Void {
trace(n);
n == 10 ? clearInterval(messInt) : n++;
}
var messInt:Number = setInterval(mess, 1000);
var n:Number = 1;

Finve
11.03.2007, 15:56
Всем спасибо!
Я сделал так:

n=0;
timer = setInterval(Intervall, 1000);
function Intervall (){
n++;
trace (n);
if (n>9){clearInterval(timer);};
}

...и все заработало... теперь вижу что можно сделать и немного по другому... еще раз всем спасибо! =)