Показать сообщение отдельно
  #1 (permalink)  
Старый 02.01.2011, 23:07
Аспирант
Отправить личное сообщение для xintrea Посмотреть профиль Найти все сообщения от xintrea
 
Регистрация: 02.01.2011
Сообщений: 56

jQuery, функция animate(), рекурсия
Здравствуйте!


Есть некая игра (что-то наподобе шахмат), для которой на jQuery пишу "плейер". Плейер предназначен для того, чтобы показывать "запись" игры. Игра на двух человек, сначала ходит фигура одного игрока, потом другого, и т.д. Плейеру скармливаются все ходы в игре, он в соответствие с этими ходами перемещает фигуры на экране.

Перемещение фигур должно поисходить так: движется одна фигура, когда она закончила движение, должна перемещаться следующая, и т.д.

В jQuery есть функция animate(), в последнем параметре которой можно указать "конечную" функцию, которая вызывается в конце движения фигуры. Я могу указывать в качестве конечной функции метод начала обработки нового шага, next_step() например.

Но, у меня складывается впечатление, что это создаст рекурсию. Так как в next_step() снова будет вызвана animate() для следующей фигуры, и т.д. Помню, что совсем недавно в браузерах были какие-то ограничения на глубину стека вызовов. То ли 64, толи 100. А в моей игре возможно и 500 ходов и более.


Всвязи с вышеизложенным, вопросы:

1. Действительно ли в вышеописанном случае будет рекурсия?

2. Какие ограничения в JavaScript на стек вызовов в современных браузерах?

3. Как организовать плейер так, чтобы небыло рекурсии? У меня есть предположение сделать машину состояний, и в качестве конечной функции для animate() указать метод, переключащий некий флаг в состояние "ход закончен". Но тогда надо организовывать основной цикл, который будет отслеживать флаги, а его можно организовать только через setTimeout(), что даже при обработке 10 раз в секунду может дать большую нагрузку на браузер.


То есть, мне бы хотелось просто вызывать обработку следующего хода в момент, когда движение фигуры на текущем ходе закончено. Как это сделать?
Ответить с цитированием