Jeer
@Jeer
уверенный пользователь

Как понять канвас?

Привет, котятки!
Разбираюсь с простой анимацией из учебников:
https://jsfiddle.net/3Leh8c1t/25/

Вроде и кода мало и есть описания всех методов, но никак не могу воткнуть, как они крутятся. Да и с тенью тоже ничерта не понятно.
На 17 строчке
ctx.fillStyle = 'rgba(0, 0, 0, 0.4)';
Это заливка чёрным цветом с полупрозрачностью. Но я не пойму, почему эта заливка работает только на прямоугольник из 26 строчки?
ctx.fillRect(0, -12, 50, 24); // Shadow
Почему не происходит заливка всего канваса? Я не вижу никаких привязок.

ctx.strokeStyle = 'rgba(0, 153, 255, 0.4)';
По идее создает рамочку, но я не вижу разницы, если закомментировать эту строку.
Кто с этим работает, как это вообще происходит? Есть цвет 0, 153, 255 - мне нужно открыть отдельную вкладку с сервисом rgb и вручную вбить эти цифры? Как-то попроще можно это делать? Или я вообще не с той стороны захожу? С отладкой тоже непонятно, я могу поставить точку останова в начале функции draw. Но пошаговый запуск ничего не показывает, после выхода из функции показывает сразу готовый результат. То есть мне для отладки нужно отвязаться от времени и в функцию ctx.rotate передавать какое-то фиксированное подобранное значение, вручную перезапускать скрипт, чтобы посмотреть покадрово, так что ли?

С орбитами планет поясните тоже, пожалуйста. Я не понимаю, почему Земля вертится по своей орбите, а Луна по своей, да еще и вокруг движущейся Земли? Я вижу строки:
ctx.rotate(((2 * Math.PI) / 60) * time.getSeconds() + ((2 * Math.PI) / 60000) * time.getMilliseconds());
  ctx.translate(105, 0);
  ctx.drawImage(earth, -12, -12);

То есть логика работы такая: мы поворачиваем весь холст на какой-то определенный угол. После этого смещаем центр всего холста. Почему после? Мы ж уже повернули холст как нам нужно!
После того, как отрисовали землю, мы рисуем луну. И тут вообще непонятно. Земля же уже присутствует на холсте, то есть, аналогичные повороты и смещения центра должны работать и на неё тоже. Опять, но мы уже проделывали с ней действия и с самим холстом. Строчки 30 //ctx.save(); и 34 //ctx.restore(); в разделе с луной можно смело закомментировать, они не влияют на выполнение.

И самый главный вопрос, как до этого можно додуматься самому? Разобрать такой (очень простой) чужой код еще можно, но как до такого додуматься самостоятельно, я не понимаю? Быть может мой мозг уже старый и он думает как-то по другому, это просто не моё?

Прошу, разжуйте мне этот пример и расскажите, как устроен процесс разработки таких вещей?
  • Вопрос задан
  • 129 просмотров
Решения вопроса 1
Vlad_IT
@Vlad_IT Куратор тега JavaScript
Front-end разработчик
Свойство fillStyle задает стиль так сказать кисти, как в фотошопе. Вы в фотошопе выбираете цвет заливки, а потом выполняете заливку (fillRect на указанных координатах).

Есть цвет 0, 153, 255 - мне нужно открыть отдельную вкладку с сервисом rgb и вручную вбить эти цифры?

Можно задавать константами, например red, blue, green и.т.д.
По идее создает рамочку, но я не вижу разницы, если закомментировать эту строку.

Если strokeStyle или fillStyle не установлены, берется их значение по умолчанию, это вроде белый цвет.

И самый главный вопрос, как до этого можно додуматься самому? Разобрать такой (очень простой) чужой код еще можно, но как до такого додуматься самостоятельно, я не понимаю? Быть может мой мозг уже старый и он думает как-то по другому, это просто не моё?

Нужен опыт, просто много пишите такие штуки, читайте про такие штуки, и все это станет элементарно.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы