Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.05.2012, 16:05   #1
Bububu
 
Регистрация: 09.03.2012
Сообщений: 4
По умолчанию Глобальное обновление анимации

Доброго времени!
Недавно начал разработку графического движка на клиента браузерной игры.

Проблема в следующем.
Есть несколько анимированных спрайтов. У каждого спрайта может быть своя скорость обновления анимации, то есть, например, один спрайт в десять кадров меняет кадр каждые 100 едениц времени, а другой - каждый 140.

Нужно сделать так, чтобы не каждый спрайт сам по себе обновлял себя, а глобальная сцена через какой-то промежуток времени производила обновление анимации. Если скорость спрайта совпадает со скоротью обновления глобально сцены - всё в порядке, но если она быстрее, либо в 1,5 раза медленее - тут возникает проблема.

Быть может, я не с того боку смотрю на анимацию? Буду очень благодарен за ссылки, полезные советы и тому подобного.

Если чего не до конца или непонятно описал - опишу понятнее и до конца.

Реализация не важна, никак не могу саму суть уловить - как сделать переодическое обновление всей анимации (например раз в секунду), но с разной скоростью спрайтов.

Заранее спасибо!
Bububu вне форума Ответить с цитированием
Старый 18.05.2012, 22:10   #2
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

Нормальных способов нет.

Как я понимаю, Вы используете замыкания для создания для каждого элемента своей анимации. Если нет, то следует это сделать.

Тут проблема в том, что у каждого браузера свой внутренний таймер и не везде он точен (Хром изрядно Вам нервы этим попортит). И анимация не может стартовать одновременно. Из-за этого расхождения будут всегда.

Я лично, периодически удаляю старую анимацию и "синхронно" запускаю всю сцену по новой.
Виталий Желтяков вне форума Ответить с цитированием
Старый 20.05.2012, 12:26   #3
Bububu
 
Регистрация: 09.03.2012
Сообщений: 4
По умолчанию

Спасибо за ответ, но проблема несколько в другом. Всё-таки я не очень ясно выразился, наверное.

У меня есть глобальный таймер, типа

Код:
setInterval(function() { updateAllAnimation(); }, 78);
Функция updateAllAnimation тригерит событие "updateAllAnimation", которое слушают спрайты и обновляются.

Код:
bind("updateAllAnimation", function() {
 updateSpriteAnimationAndRender();
})
Но есть проблема, скорость обновления спрайтов может быть быстрее/медленнее чем скорость глобального обновления. То есть при каждом обновлении спрайт высчитывает, прошло ли достаточно времени чтобы поменять кадр.
Например, если глобально обновление каждые 78мс, а скорость обновления спрайта каждые 80мс, получается такая вот картина

1) 78мс - Спрайт высчитал, что обновление ещё не наступило (он должен каждые 80мс обновляться)
2) 156мс - Спрайт обновился
3) 234мс - Спрайт опять не обновился

Будут задержки, хотя реально скорость спрайта особо не отличается от скорости глобального обновления.

Вот я и думаю, как так всё организовать? Может я неправильный метод выбрал? Но чтобы у каждого спрайта был свой таймер - это тоже не очень хорошо.
Bububu вне форума Ответить с цитированием
Старый 20.05.2012, 19:47   #4
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

Три такой организации быстро запутаетесь. Лучше сделайте каждую анимацию независимой от других.
Виталий Желтяков вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Глобальное потепление - насколько опасно? hardorsoft Свободное общение 17 29.06.2011 13:47
Глобальное изменение GTA. VintProg Gamedev - cоздание игр: Unity, OpenGL, DirectX 14 22.07.2009 07:28
Глобальное позиционирование освещения в OpenGL MoDErahN Мультимедиа в Delphi 5 02.06.2009 20:59
Глобальное использование переменных DISAITE Помощь студентам 1 16.03.2009 16:21
А если всем объедениться и создать что-нибудь глобальное? Viteef Свободное общение 37 21.05.2007 16:10