RaphaelJS - Одновременная анимация - PullRequest
1 голос
/ 31 января 2011

У меня есть шарики понг, которые генерируются очень последовательно, но ставки меняются динамически.Таким образом, в данную секунду может появиться 1 шарик понга, который рисуется и перемещается по экрану (постоянно слева направо), или 50.

У меня есть ракетка-понг, которая реагирует на генерацию этихшары, и он должен «поймать» каждый из шаров, которые отправляются к месту назначения.Координата x всегда одна и та же, потому что лопасть понга никогда не движется, но координата y генерируется случайным образом.

Вот очень похожий (если не идентичный) пример того, что я делаю: http://www.youtube.com/watch?v=HeWfkPeDQbY

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

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

Есть ли более эффективный способ сделать это?

1 Ответ

2 голосов
/ 09 апреля 2011

Я предполагаю, что проблема в том, что движение каждого мяча (и весла) контролируется отдельным таймером.Поскольку нет никаких гарантий относительно точности таймеров js, действительно нет никаких гарантий относительно того, сколько, много таймеров будут взаимодействовать.

Существует два основных подхода к решению проблемы:

  1. Вместо использования анимационных примитивов Raphaeljs, реализуйте синхронную анимацию самостоятельно с помощью setTimer, обновляя положение каждого шара (и весла) синхронно.Тогда любые заикания таймера применяются последовательно ко всем элементам в вашей вселенной.

  2. Используйте обратную связь, чтобы корректировать курс весла, например, с помощью специального setTimer, который периодически смотрит на то, как близко веслонаходится там, где это должно быть, и, если необходимо, вызывает .stop () для анимации весла, чтобы повторно выполнить с более агрессивными параметрами, закрывая пробел.

...