Всем доброго времени суток.
Есть задача:
На карте нужно последовательно (не одновременно) сгенерировать несколько квадратов (2-4), сделать анимацию их движения по заданому пути и по завершению пути удалить этот квадрат.
Я уже как 3й день грызу всеязычные туториалы по канвасу, но почему то не могу додуматься как это реализировать. Мне понятно как вставить само изображение, понятно как нарисовать квадрат, а вот анимации и работа с нескольками объектами я догнать не могу.
Я хотел бы понять:
-как работать с нескольками элементами
-как создавать анимацию движения для каждого элемента
Очень надеюсь на вашу помощь по этому вопросу, зарание спасибо.
З.Ы.
карту с координатами прикрепил
1. eko24 - 29 Сентября, 2013 - 01:56:21 - перейти к сообщению
2. DelphinPRO - 29 Сентября, 2013 - 20:00:35 - перейти к сообщению
Анимация - тупо перерисовывать холст с частотой анимации, изменяя координаты. Сложные объекты отрисовывать в буферном холсте и при необходимости копировать на основной (увеличится FPS)
C несколькими элементами работать по очереди.
C несколькими элементами работать по очереди.
3. eko24 - 29 Сентября, 2013 - 23:35:03 - перейти к сообщению
это все на словах.
я даже примерно не понимаю как это прописать в коде
я даже примерно не понимаю как это прописать в коде
4. DelphinPRO - 29 Сентября, 2013 - 23:53:58 - перейти к сообщению
eko24 пишет:
понятно как нарисовать квадрат,
Если вам это понятно, что мешает нарисовать квадрат в точке (x,y), Через, допустим, 100мс стереть, и нарисовать квадрат в точке (x+1, y+1). Затем повторять эти действия, пока квадрат не достигнет цели. Это и есть покадровая анимация.
5. eko24 - 30 Сентября, 2013 - 18:57:44 - перейти к сообщению
кажется , вы открыли мне глаза.
то есть, если я правильно понял, то блок стирания должен присутствовать обязательно.
и если вас это нездатруднит - обьясните как работать с несколькими квадратами, хотя бы на пальцах.
я все еще не понимаю как генерировать несколько уникальных/независимых квадратов
то есть, если я правильно понял, то блок стирания должен присутствовать обязательно.
и если вас это нездатруднит - обьясните как работать с несколькими квадратами, хотя бы на пальцах.
я все еще не понимаю как генерировать несколько уникальных/независимых квадратов
6. IllusionMH - 30 Сентября, 2013 - 19:22:31 - перейти к сообщению
eko24, перебирая квадраты(массив объектов с значениями или как оно реализовано у вас) в цикле: по старым координатами нарисовать квадрат фонового цвета, рассчитать новые координаты, нарисовать квадраты снова.
7. eko24 - 30 Сентября, 2013 - 19:59:20 - перейти к сообщению
IllusionMH пишет:
или как оно реализовано у вас
в том то и дело, что пока что оно никак не реализировано.
А вообще вы подкинули замечательный алгоритм.
И у меня появился еще один вопрос:
Я уже прекрасно понимаю, что нет ничего сложно перемещать обьект паралельно осям координат используя инкременты или декременты
Но вот как рационально сделать так, что бы квадрат, допустим, двигался с точки (0,0) в точку (200,150) ?
Очень жду Ваших ценных советов
8. IllusionMH - 01 Октября, 2013 - 11:47:40 - перейти к сообщению
eko24, нужно записать лагранжиан для данного квадрата.
Все зависит о того как он должен двигаться.
Если по прямой, то никаких проблем: задаем время, считаем скорость по х и у, на каждой итерации прибавляем к координате скорость(смещение за единицу времени)
Если скорость должна менятся - добавляем ускорения.
Если нужно двигаться вокруг препятствий, то тут уже нужно включать логику и придумывать алгоритмы движения, разбивая сложный маневр на серию простых.
Все(кроме лагранжиана) как в школьной программе за 8-10 класс
Все зависит о того как он должен двигаться.
Если по прямой, то никаких проблем: задаем время, считаем скорость по х и у, на каждой итерации прибавляем к координате скорость(смещение за единицу времени)
Если скорость должна менятся - добавляем ускорения.
Если нужно двигаться вокруг препятствий, то тут уже нужно включать логику и придумывать алгоритмы движения, разбивая сложный маневр на серию простых.
Все(кроме лагранжиана) как в школьной программе за 8-10 класс
9. DelphinPRO - 01 Октября, 2013 - 17:08:14 - перейти к сообщению
IllusionMH пишет:
Это если фон однородный. Если фоном стоит картинка, или еще что-то сложное, можно например копировать на холст кусочек фона по заданным координатам. Но это все уже оптимизации, если простая перерисовка будет давать низкий FPS. по старым координатами нарисовать квадрат фонового цвета
eko24 пишет:
блок стирания должен присутствовать обязательно.
Чтобы стереть canvas достаточно присвоить свойству width или height значение. Можно даже то же самое, что и было. Т.е. для холста шириной 200px для стирания достаточно написать canvas.width = 200; (canvas - это ваш объект холста).
10. IllusionMH - 01 Октября, 2013 - 17:23:25 - перейти к сообщению
DelphinPRO, я писал отталкиваясь от рисунка выше. Да и начинать нужно с простого, а когда уже придет понимание дела(а судя по вопросу о движении не вдоль осей, его нет) тогда картинки, оптимизации и прочее.
11. eko24 - 01 Октября, 2013 - 23:56:32 - перейти к сообщению
IllusionMH пишет:
Все зависит о того как он должен двигаться.
Там просто набор точек на карте.
С движением по пути разобрался, после того как немного порыл темы на стаковерфлоу нашел уйму разнообразных плагинов решения этой проблемы (например вот этот http://ijin[dot]net/crSpline/demo[dot]html ).
У меня еще такое чуство, что полюбому появятся новые вопросы, и буду очень рад если вы снова сможете мне помочь.
Плюсами вас уже засыпал :3
(Добавление)
И вообще, если дружите с английским, то для начинающих в канвасе рекомендую эту книгу:
http://www[dot]amazon[dot]com/Foundation[dot][dot][dot]nt/dp/1430232919