Скачать "#2. Создаем игру на JavaScript для НАЧИНАЮЩИХ (Анимируем дерево, создаем паузу)"

Скачайте это видео через UDL Client
  • Видео mp4 HD+ со звуком
  • Mp3 в максимальном качестве
  • Файлы любого размера
Теги видео
|

Теги видео

Уроки
lesson
lessons
Для новичков
Для начинающих
Создать сайт
css
css3
Курсы по css
Уроки по css
Создать сайт html css
html
html5
javascript
js
it
программирование
практика
игра
requestAnimationFrame
cancelAnimationFrame
Субтитры
|

Субтитры

00:00:02
надеюсь что вы не будет слышно но мы
00:00:04
продолжаем работать с нашей машинкой
00:00:06
сегодня наша задача заключается в том
00:00:08
чтобы анимировать вот эти деревья
00:00:10
поэтому сразу переходим в наш файлик
00:00:12
gingers давайте откроем нашу консоль что
00:00:15
было удобней работать и для начала нам
00:00:17
нужно запустить нашу игру наша игра
00:00:20
будет находиться в некой функции который
00:00:23
мы назовем ну давайте например просто
00:00:25
game но и здесь мы будем описывать
00:00:27
логику нашей игры первым делом мы
00:00:30
конечно же нашу игру запустим и у нас
00:00:33
получается таким образом что весь код
00:00:35
нашей игры будет находиться внутри нашей
00:00:38
функции game за пределами этой функции
00:00:40
мы больше делать нечего не будем ну и в
00:00:42
таком случае мы в принципе можем сделать
00:00:44
сама вызывающий ся функцию поэтому имя у
00:00:47
этой функции мы можем удалить завернуть
00:00:50
функцию скобочки и потом здесь в конце
00:00:53
написать еще одни круглые скобочки
00:00:55
получилась самая вызывающая функция
00:00:57
которой я ранее рассказывал в принципе
00:01:00
вы можете использовать вариант который я
00:01:01
показал чуть ранее одно и то же почему
00:01:04
же мы всю логику нашей игры будем писать
00:01:06
внутри какой-то функции ну потому что
00:01:08
это правило хорошего кода потому что
00:01:11
если мы заведем еще один файлик . джесс
00:01:13
чтобы они просто своими переменами друг
00:01:16
друга не перри затирали ну об этом я
00:01:18
тоже рассказывал останавливаться на этом
00:01:20
долго не будем и так что нам понадобится
00:01:22
для нашей игры для начала нам надо найти
00:01:25
наши элементы мы найдем нашу машину
00:01:28
через документ к вере селектор the
00:01:30
quarry selector и указываем что у нас
00:01:32
есть элемент с классом корр так же нам
00:01:36
нужно найти наши деревья тут можем
00:01:38
воспользоваться двумя вариантами либо мы
00:01:40
и найдем наши деревья как-то по
00:01:42
отдельности через документ к вере
00:01:44
селектор как мы делали это с нашей
00:01:45
машиной мы же знаем что у нас несколько
00:01:48
деревьев поэтому мы найдем их через
00:01:50
квали селектору у у каждого нашего
00:01:52
дерева есть класс 3 с которым мы будем
00:01:55
работать то есть теперь тут в в
00:01:57
переменной тряс лежит несколько
00:02:00
элементов но и давайте выведем эти
00:02:01
переменные и убедимся что мы
00:02:03
действительно нашли наши элементы
00:02:06
выведи в нашу машинку и выведем наши
00:02:09
деревья обновим страничку и посмотрим
00:02:11
нашу машинка нашлась но наши деревья это
00:02:14
наш массив принципе можно сделать опять
00:02:17
же как я говорил вот таким образом
00:02:19
дерево там один дерево 1 ну и так далее
00:02:23
1 2 3 4 5 6 но вот такой вариант будет
00:02:26
намного лучше потому что деревьев у нас
00:02:28
с вами может быть как одно так и 100000
00:02:31
далее давайте найдем вот этот элемент у
00:02:33
нас эта кнопка который имеет класс game
00:02:36
батон поэтому нашу кнопку так и назовем
00:02:38
game батон
00:02:40
документ опять же к вере
00:02:43
selector и находим элемент с этим
00:02:46
классом теперь давайте повесим сразу на
00:02:48
эту кнопку события и будем менять ее
00:02:50
если мы на нее нажимаем вешаем на нее
00:02:52
событий через и дэвин леснар нас
00:02:55
интересует события клика если этот клик
00:02:58
происходит тогда мы вызываем вот эту
00:03:00
функцию которую мы сюда передали ну и
00:03:03
что же мы тут будем делать но самый
00:03:05
простой вариант это внутри нашего
00:03:07
баттона завести еще одну картинку
00:03:10
которую мы назовем play png давайте
00:03:13
поставим классы для наших элементов
00:03:16
например это пауз а это класс получается
00:03:20
play нам понадобятся наши стили
00:03:23
открываем файлик styles.css
00:03:25
и переходим вниз и так у нас тут есть
00:03:28
наш game батон у которого есть на
00:03:32
давайте так и сделаем мы говорим что в
00:03:34
гейм батон есть еще один класс например
00:03:37
play который по умолчанию у нас будет
00:03:40
дисплей в значении но он то есть мы
00:03:42
кнопку плей скрываем сейчас ничего не
00:03:45
поменяется так и должно быть переходим
00:03:47
сюда давайте заведем некую переменную
00:03:50
который мы назовем из пауз по умолчанию
00:03:53
это будет значение фолз эта переменная
00:03:55
на в принципе сейчас понадобится здесь
00:03:58
мы ставим с вами следующее условие если
00:04:00
у нас сейчас игра на паузе иначе
00:04:03
получается по умолчанию нас игра не на
00:04:06
паузе то есть если игра не на паузе
00:04:08
тогда мы делаем следующее давайте мы
00:04:13
сначала через консоль der мы видим наш и
00:04:16
батоны посмотрим что у него есть там
00:04:18
будут и но если мы посмотрим то мы
00:04:20
вспомним что есть такое свойство как
00:04:22
чудра это дети нашего элемента у нас тут
00:04:26
всего 2 ребенка это две картинки
00:04:28
картинка с паузой и картинка play то
00:04:31
есть тут мы можем обратиться к какому-то
00:04:35
конкретному ребенку эдак логика
00:04:37
следующее если мы находимся на паузе то
00:04:40
мы обращаемся к нашему game баттону
00:04:42
обращаемся к чудом итак если мы на паузе
00:04:45
то мы должны картинку с паузой закрыть а
00:04:49
картинку play показать поэтому картинку
00:04:52
с паузой мы достаем через нулевой
00:04:54
элемент так как эта картинка имеет
00:04:56
нулевой индекс обращаемся к свойству
00:04:59
style дальше к свойству дисплей и
00:05:01
устанавливаем значения но он и так
00:05:04
получается если мы на паузе то картинку
00:05:06
с паузы мы скрываем а картинку play мы с
00:05:10
вами показываем дисплей и нишу и точно
00:05:13
также делаем только наоборот если мы
00:05:15
находимся не на паузе то картинку с
00:05:19
паузами показываем а картинку play
00:05:22
скрываем примерно такая логика но и
00:05:25
далее нам надо нашу переменную из полос
00:05:27
просто поменять на какое-то значение то
00:05:29
есть по умолчанию нас falls как только
00:05:31
мы на эту кнопку нажимаем мы должны
00:05:34
поменять значение этой переменной на
00:05:36
противоположное поэтому обращаемся к
00:05:39
этой переменной и говорим что мы кладем
00:05:41
туда тоже самое только ставим ! впереди
00:05:45
то есть мы говорим что мы кладем то же
00:05:47
самое но в обратное значение получается
00:05:50
изначально была фолз мы нажали сюда на
00:05:52
кнопку паузы у нас фолз меняется натру и
00:05:55
мы кладем сюда true получается у нас
00:05:58
отрабатывает это условие получается у
00:06:00
нас рисуется наша вот эта кнопка потом
00:06:03
второй раз у нас тут лежит уже true мы
00:06:06
снова кликаем сюда у нас вот это тру
00:06:09
меняется на фолс записывается в
00:06:11
переменную spouse отрабатывает элс и мы
00:06:14
получаем вторую картинку и теперь наша
00:06:17
пауза работает хорошо давайте теперь
00:06:20
займемся секции за нашей игрой в
00:06:23
принципе вот это мы можем вот так
00:06:25
объединить и там где-то оставить что по
00:06:27
нотам где-то вместе слитно было итак
00:06:29
теперь займёмся нашей игрой у нас будет
00:06:32
функция которая называется start game
00:06:35
самая обычная функция ничего интересного
00:06:37
только вызывать эту функцию мы будем не
00:06:40
совсем обычным способом мы ее будем
00:06:42
вызывать внутри другой дополнительные
00:06:45
функции эта функция request они мишин
00:06:47
фрейм сюда мы как раз таки нашу функцию
00:06:50
и передаем зачем нам нужен некий
00:06:53
посредник вот эта функция request
00:06:55
анимешных фрейм позволяет рисовать нам в
00:06:57
браузере анимацию и делать это
00:06:59
достаточно эффективно потому что при
00:07:01
помощи этой функции у нас браузер
00:07:03
автоматически следит за тем как нагружен
00:07:06
процессор пользователя осталась ли у
00:07:08
него зарядка потому что если у него
00:07:10
зарядки достаточно мало-то вот эта
00:07:12
функция будет пропускать пару
00:07:13
перерисовок нашей игры и таким образом у
00:07:16
пользователя будет игра немножко лагать
00:07:18
но она хотя бы будет работать в
00:07:21
противном случае она у нас может вообще
00:07:22
вылететь потому что у нас перерасчеты
00:07:25
нашей логике не будут успевать за тем
00:07:28
что происходит на экране и просто
00:07:30
пользователь будет вообще получать
00:07:31
какой-то кошмар но вот эта функция нам
00:07:34
поможет хотя бы с лагами но нашу игру
00:07:36
запустить поэтому через нее мы запускаем
00:07:39
нашу функцию start game вот эта функция
00:07:41
возвращает некий идентификатор который
00:07:44
мы будем класть в отдельную переменную
00:07:46
эту переменную мы назовем и не мишин
00:07:48
айди и по умолчанию это они мыши найди
00:07:51
будет нал и так когда вы выполнится вот
00:07:55
эта функция она а свой идентификатор
00:07:57
положат вот в эту переменную ну и в
00:08:00
принципе давайте мы здесь запихнем
00:08:02
какой-нибудь консоли log давайте просто
00:08:05
слова теста выведем и посмотрим если мы
00:08:08
сейчас обновим страничку вот мы получили
00:08:10
наш консоль лак который был вызван
00:08:12
использую вот эту request они машин
00:08:14
фрейм мы можем также вывести они мишин
00:08:17
айди и посмотреть какой идентификатор
00:08:19
сформировался 0 здесь циферка 1 хорошо
00:08:22
теперь так как это анимация она должна
00:08:25
быть зациклена мы должны сделать
00:08:27
примерно следующее внутри нашей функции
00:08:30
start game мы должны произвести все то
00:08:33
же самое то есть зациклить нашу функцию
00:08:35
старт ге то есть изначально наша функция
00:08:37
start game вызывается на восьмой строчке
00:08:40
дальше когда тело нашей функции
00:08:42
отработает мы снова при помощи request
00:08:45
они машин фрейм вызовем нашу функцию
00:08:47
start game и кстати теперь мы можем
00:08:49
следить у нас они меньше найди будет
00:08:51
меняться ну и как мы видим наша функция
00:08:53
вызывается кучу раз давайте пока
00:08:56
закомментируем и раскомментируем снова
00:08:59
то есть остановим наши вот эти консоли
00:09:00
логе бесконечные и так с этим думаю
00:09:03
понятно то есть при помощи request
00:09:05
занимаешь на фрейм мы добиваемся некой
00:09:07
оптимизации от браузера и плюс мы еще
00:09:10
подсказываем браузер что мы собираемся
00:09:12
работать с анимацией и скорее всего он
00:09:13
тут какие-то дополнительные оптимизации
00:09:15
нам накрутят но и зачем нам вот этот
00:09:17
идентификатор у нас вот эта штука будет
00:09:20
вызывать нашу функцию старт и бесконечно
00:09:23
и по сути внутри вот этой функции star
00:09:25
game у нас будет рассчитываться логика
00:09:27
нашей игры но и когда мы ставим игру на
00:09:30
паузу мы должны также приостановить
00:09:33
расчет вот этой всей логике который было
00:09:35
внутри start game как мы можем это
00:09:37
сделать при помощи вот этого они меньше
00:09:39
найди у нас есть дополнительная функция
00:09:42
которая называется console они michelin
00:09:45
фрейм куда мы передаем идентификатор и
00:09:48
мы эту функцию будем вызывать если у нас
00:09:51
игра находится на паузе то есть внутри
00:09:53
нашего еда вент леснара но и давайте
00:09:56
посмотрим получается обновляем страничку
00:09:59
нас пошли вот эти консоли логе и теперь
00:10:01
мы нажимаем на кнопку паузы и все логика
00:10:04
нашей игры приостанавливается вот у нас
00:10:06
успела сработать 400 консоль логов то
00:10:09
есть еще раз когда мы запускаем нашу
00:10:12
функцию мы запускаем ее через request
00:10:14
они мышь ему фрейм и сохраняем
00:10:16
идентификатор в некую переменную когда
00:10:19
тело нашей функции отрабатывает мы нашу
00:10:21
функцию запускаем еще разочек и точно
00:10:24
так же сохраняем новый идентификатор
00:10:26
который будет сформирован
00:10:28
как только мы нажмем на кнопку пауза мы
00:10:30
используя этот идентификатор
00:10:32
остановим работу функции start game то
00:10:35
есть при остановим нашу игру в принципе
00:10:37
здесь я думаю что хватит давайте
00:10:40
перейдем теперь к расчету наших деревьев
00:10:42
пока что мы будем работать только с
00:10:44
одним деревом поэтому давайте остальные
00:10:46
деревья мы закомментируем чтобы они нам
00:10:48
не мешались обновим страничку осталось
00:10:51
одно дерево давайте пока вот это мы тоже
00:10:53
закомментируем чтоб нам не мешались тут
00:10:54
кансу люди ну и давайте с этим деревом и
00:10:57
работать для начала нам его надо
00:10:59
вытащить это первый элемент в массиве и
00:11:02
назовем мы его first давайте мы это
00:11:05
дерево выведем и убедимся что она у нас
00:11:07
нашлось через консоль лог но и вот оно
00:11:10
наше дерево теперь наша задача в этом
00:11:13
уроке просто сделать так чтобы она
00:11:15
плавненько спустилась вниз ну и как мы
00:11:17
будем это делать для начала нам надо
00:11:19
получить координаты нашего дерева чтобы
00:11:22
это сделать в внутри window есть такая
00:11:26
функция которая называется get компьютер
00:11:30
style то есть получи рассчитанные стиля
00:11:33
мы говорим что мы хотим получить
00:11:35
рассчитанный стиля нашего давайте так
00:11:38
временную переменную пряди мы говорим
00:11:40
что мы хотим получить все стили которые
00:11:43
есть в этом дереве но нам нужно только
00:11:46
лишь одно наше свойство transform
00:11:48
давайте мы выведем в консоль лук и
00:11:50
посмотрим что мы тут получили
00:11:53
напоминаю что мы указывали координаты
00:11:55
через это свойство transform как раз вот
00:11:59
такие вот координаты мы с вами указали и
00:12:01
теперь если мы обновим страничку там ее
00:12:04
координаты и получили только мы получили
00:12:06
не совсем в удобном для нас формате вот
00:12:09
они наши 220 это то что мы смешали по
00:12:12
оси x и вот они наши -80 это как раз
00:12:16
таки вот эти -15 we аж как раз таки вот
00:12:19
эти координаты вот эту последнюю циферку
00:12:21
нам с вами надо вытащить чтобы это
00:12:23
вытащить есть много различных вариантов
00:12:26
мы с вами воспользуемся самым самым
00:12:28
простым ну и возможно даже самым
00:12:31
эффективным я тут не уверен но давайте
00:12:34
чтобы не усложнять попробуем вытащить
00:12:35
эту циферку первое что мы сделаем это
00:12:38
создадим переменную которая назовем
00:12:40
matrix то есть наша матрица вот это
00:12:42
которые мы получим вот при помощи этой
00:12:44
строчке но это предыдущая строка который
00:12:47
я тут вырезал а далее мы говорим что мы
00:12:50
обращаясь к нашей строке matrix давайте
00:12:53
опять в конце лог у строк в java скрипте
00:12:56
есть отличная функция которая называется
00:12:58
сплит мы эту функцию вызываем и передаем
00:13:01
сюда строчку она помогает нам разделить
00:13:03
нашу строчку по каким-то символом мы тут
00:13:06
видим что нашу строчку мы в принципе
00:13:08
можем по запятой разделить давайте сюда
00:13:10
мы в качестве параметра передадим
00:13:12
строчку с запятой и таким образом мы
00:13:15
получим массив наших элементов ну как вы
00:13:19
можете догадаться нам нужен последний
00:13:21
элемент нашего массива вот это как раз
00:13:23
таки наши координаты по оси y давайте мы
00:13:26
их достанем для этого мы и запихнем наше
00:13:29
разделение в отдельную переменную
00:13:31
давайте назовем ее просто и рэй то есть
00:13:34
массив и запихнем сюда нашу строчку
00:13:38
теперь нам нужно достать последний
00:13:40
элемент из массива ну и чтобы достать
00:13:42
последний элемент из массива делаем
00:13:44
классические операции создаем переменную
00:13:46
давайте назовем ее last элемент и что
00:13:50
нам нужно сделать обращаемся к нашему
00:13:52
массиву достаем элемент по индексу и
00:13:55
указываем в качестве индекса длину
00:13:58
нашего массива -1 то есть здесь длина
00:14:01
нашего массива 6 последний элемент
00:14:04
находится под индексом 5 то есть 6 минус
00:14:06
1 получаем 5 и таким образом достаем
00:14:09
последний элемент нашего массива давайте
00:14:12
мы его выведем и убедимся что мы его
00:14:14
получили но в принципе все только теперь
00:14:17
нам мешает вот это скобочка мы ее можем
00:14:19
как-то отдельно удалить но плюс ко всему
00:14:22
у нас вот эта штука это строка а нам
00:14:25
надо чтобы это было число есть
00:14:27
замечательная функция которая называется
00:14:30
парс флот она преобразовывает строчку к
00:14:33
числу мы вызываем эту функцию передаем
00:14:36
туда наш последний элемент массива но и
00:14:39
прелесть этой функции заключается в том
00:14:41
что оно отрежет все лишние части в конце
00:14:43
который не относится к числу
00:14:45
как раз скобочка к числу не относится
00:14:47
поэтому здесь мы сохраним и получим вот
00:14:50
такое вот замечательное число ну и мы
00:14:52
также можем это запихнуть в какую-то
00:14:54
отдельную переменную которую мы назовем
00:14:56
корт y то есть эта координата по оси y
00:15:00
ну и так как мы очень часто будем
00:15:03
доставать координаты наших элементов
00:15:05
предлагаю запихнуть это в какую-то
00:15:07
отдельную функцию зовем эту функцию get
00:15:10
y корт этой функции мы будем передавать
00:15:13
какой-нибудь наш элемент а наша функция
00:15:16
что она будет делать она будет брать
00:15:18
этот элемент доставать из него стиле
00:15:21
конкретное свойство transform получать
00:15:24
какую-то матрицу разбивать эту матрицу
00:15:26
по запятые находить последний элемент и
00:15:29
последний элемент преобразовывать как
00:15:32
числу ну и в конце оно это число будет
00:15:34
возвращать и так для чего мы все это
00:15:37
делали теперь давайте создадим еще одну
00:15:40
функцию который будет отвечать за
00:15:42
анимацию наших деревьев поэтому назовем
00:15:45
нашу функцию турист они меньше это
00:15:48
функция который будет вызвана внутри
00:15:50
нашей функции start game то есть когда
00:15:53
мы запускаем нашу игру мы говорим что мы
00:15:56
будем анимировать наши деревья здесь
00:15:58
также мы будем вызывать другие функции
00:16:00
например анимировать наши монетки
00:16:03
анимировать наши знаки но и так далее
00:16:06
итак функция trees они меньше он будет
00:16:08
заниматься анимации только для наших
00:16:11
деревьев ну пока что мы работаем только
00:16:13
с одним деревом это вот это наша
00:16:15
переменная в будущем у нас тут будет
00:16:17
цикл который будет пробегаться по всем
00:16:19
деревьям но пока что давайте поработаем
00:16:21
только с одним и так что нам надо
00:16:23
сделать с нашим деревом нам надо
00:16:26
поменять у него значения свойства
00:16:28
transform обращаемся вот таким вот
00:16:30
образом находим наше свойство transform
00:16:32
и говорим что сюда мы будем
00:16:34
останавливать какое-то новое значение
00:16:36
какое значение
00:16:37
ну конечно же
00:16:39
translate и нам надо менять значение y
00:16:42
но так как сюда мы будем подставлять
00:16:44
какой-то перемены мы с вами кавычки
00:16:47
поменяем на вот такие и сюда указываем
00:16:51
нашу переменную нее корт эту переменную
00:16:54
давайте конечно же создадим
00:16:56
что будет в этой переменной для начала
00:17:00
давайте создадим еще одну переменную
00:17:02
которую мы назовем speed то есть
00:17:05
какая-то скорость пусть это будет
00:17:07
циферка 3 и получаются новые координаты
00:17:09
будут иметь следующую формулу мы берем
00:17:12
координаты по оси y у нашего первого
00:17:15
дерева то есть те координаты которые у
00:17:17
него есть сейчас плюс наша скорость но и
00:17:20
давайте посмотрим сначала что это
00:17:22
работает обновим страничку пока что она
00:17:24
не работает давайте разбираться в чем
00:17:26
проблема давайте выведем координаты
00:17:28
нашего дерева для начала и посмотрим
00:17:30
правильно ли они сформировались но потом
00:17:33
пройдемся по всей этой логике и еще раз
00:17:35
расскажу в чем ее смысл ну да видим что
00:17:38
у нас координаты не совсем правильно
00:17:39
меняются вот этот консоли лог с тестом
00:17:42
мы в принципе можем с вами грохнуть и
00:17:44
нам больше не понадобятся а но в
00:17:46
принципе я не сразу заметил тут мы еще
00:17:48
должны указать в пиксель значения то
00:17:51
есть тут мы говорим что мы ставим новые
00:17:53
из наших значения наших координат но
00:17:55
обязательно они в пикселях но и теперь
00:17:57
это вроде должно как сработать и до наше
00:17:59
дерево анимировал оси куда-то там уехала
00:18:02
но и давайте разберем еще раз как это
00:18:03
все работает и будем на этом заканчивать
00:18:06
мы достали наши деревом и запустили нашу
00:18:10
игру при помощи request они мaшин фрейма
00:18:12
что мы делаем запуская нашу игру мы
00:18:15
анимируем наши деревья как мы это делаем
00:18:18
мы пытаемся вычислить координаты далее
00:18:21
здесь мы достаем текущие координаты
00:18:23
нашего дерева допустим это будет 0 и
00:18:26
прибавляем к нулю нашу скорость то есть
00:18:28
три на выходе мы получаем новую
00:18:31
координату это 3 и говорим что теперь мы
00:18:33
перезаписываем свойства transform мы
00:18:36
ставим ему translate y в значение 3
00:18:39
пикселя все наша функция здесь
00:18:41
отработала мы переходим к этому шагу и
00:18:43
снова запускаем start game start game
00:18:46
снова вызывает анимацию нашего дерева
00:18:48
получаем его координаты нашего дерева
00:18:51
теперь тут уже лежит цифра 3 снова
00:18:53
прибавляем нашу скорость и получается мы
00:18:56
с вами прибавили к трем 3 и новые
00:18:58
координаты это 6 указываем translite y
00:19:01
что это теперь шесть пикселей ну и так
00:19:04
до бесконечности потому что у нас сейчас
00:19:06
наше дерево никак не зациклена а в
00:19:08
будущем мы с вами будем вычислять что
00:19:10
если она доходит до нижней границы она
00:19:12
будет рисоваться за пределами экрана с
00:19:14
нулевыми координатами его так она будет
00:19:16
болтаться сначала вниз потом вверх вниз
00:19:19
вверх и так далее но функция по расчету
00:19:22
координат достаточно простая вроде уже
00:19:24
два раза рассказал как я и сделал думаю
00:19:26
с ним вопросов не возникнет а на этом я
00:19:28
думаю что мы можем закончить все всем
00:19:31
спасибо всем пока
00:19:33
[музыка]

Описание:

Поддержать автора: https://www.donationalerts.com/r/kakeitoyroki Курс по Chrome Dev Tools: https://stepik.org/course/194549/promo?referral=WzE5NDU0OSw3ODY1OTc3MzIsMTc2OTM4Mjc3MS4wODI2OTVd%3A1vk9Hn%3A-Y34yvWo9DSI_A01Q1dnF3eYEq0 Исходный код: https://github.com/R1ON/car-game/tree/main/2 ***** Таймкоды: 00:00 Введение 00:18 Подготовка JS 01:22 Находим машинку и деревья 02:32 Реализация паузу 06:30 requestAnimationFrame 09:17 cancelAnimationFrame 10:40 Ищем координаты дерева 19:36 Анимируем дерево 19:31 Всем спасибо, всем пока ***** Музыка: 1. chill. by sakura Hz https://soundcloud.com/sakurahertz Creative Commons — Attribution 3.0 Unported — CC BY 3.0 https://creativecommons.org/licenses/by/3.0/ Music promoted by Audio Library https://www.youtube.com/watch?v=pF2tXC1pXNo 2. https://www.youtube.com/playlist?list=PLsnJOHsVvrji_YI-PbuT-eYBQHOaapriV

Медиафайл доступен в форматах

popular icon
Популярные
hd icon
HD видео
audio icon
Только звук
total icon
Все форматы
* — Если видео проигрывается в новой вкладке, перейдите в неё, а затем кликните по видео правой кнопкой мыши и выберите пункт "Сохранить видео как..."
** — Ссылка предназначенная для онлайн воспроизведения в специализированных плеерах

Вопросы о скачивании видео

question iconКак можно скачать видео "#2. Создаем игру на JavaScript для НАЧИНАЮЩИХ (Анимируем дерево, создаем паузу)"?arrow icon

    Сайт http://univideos.ru/ — лучший способ скачать видео или отдельно аудиодорожку, если хочется обойтись без установки программ и расширений.
    Расширение UDL Helper — удобная кнопка, которая органично встраивается на сайты YouTube, Instagram и OK.ru для быстрого скачивания контента.

    Программа UDL Client (для Windows) — самое мощное решение, поддерживающее более 900 сайтов, социальных сетей и видеохостингов, а также любое качество видео, которое доступно в источнике.

    UDL Lite — представляет собой удобный доступ к сайту с мобильного устройства. С его помощью вы можете легко скачивать видео прямо на смартфон.

question iconКакой формат видео "#2. Создаем игру на JavaScript для НАЧИНАЮЩИХ (Анимируем дерево, создаем паузу)" выбрать?arrow icon

    Наилучшее качество имеют форматы FullHD (1080p), 2K (1440p), 4K (2160p) и 8K (4320p). Чем больше разрешение вашего экрана, тем выше должно быть качество видео. Однако следует учесть и другие факторы: скорость скачивания, количество свободного места, а также производительность устройства при воспроизведении.

question iconПочему компьютер зависает при загрузке видео "#2. Создаем игру на JavaScript для НАЧИНАЮЩИХ (Анимируем дерево, создаем паузу)"?arrow icon

    Полностью зависать браузер/компьютер не должен! Если это произошло, просьба сообщить об этом, указав ссылку на видео. Иногда видео нельзя скачать напрямую в подходящем формате, поэтому мы добавили возможность конвертации файла в нужный формат. В отдельных случаях этот процесс может активно использовать ресурсы компьютера.

question iconКак скачать видео "#2. Создаем игру на JavaScript для НАЧИНАЮЩИХ (Анимируем дерево, создаем паузу)" на телефон?arrow icon

    Вы можете скачать видео на свой смартфон с помощью сайта или pwa-приложения UDL Lite. Также есть возможность отправить ссылку на скачивание через QR-код с помощью расширения UDL Helper.

question iconКак скачать аудиодорожку (музыку) в MP3 "#2. Создаем игру на JavaScript для НАЧИНАЮЩИХ (Анимируем дерево, создаем паузу)"?arrow icon

    Самый удобный способ — воспользоваться программой UDL Client, которая поддерживает конвертацию видео в формат MP3. В некоторых случаях MP3 можно скачать и через расширение UDL Helper.

question iconКак сохранить кадр из видео "#2. Создаем игру на JavaScript для НАЧИНАЮЩИХ (Анимируем дерево, создаем паузу)"?arrow icon

    Эта функция доступна в расширении UDL Helper. Убедитесь, что в настройках отмечен пункт «Отображать кнопку сохранения скриншота из видео». В правом нижнем углу плеера левее иконки «Настройки» должна появиться иконка камеры, по нажатию на которую текущий кадр из видео будет сохранён на ваш компьютер в формате JPEG.

question iconКак воспроизвести и скачать потоковое видео?arrow icon

    Для этого понадобится VLC-плеер, скачать его можно бесплатно с официального сайта https://www.videolan.org/vlc/

    Как воспроизвести потоковое видео через VLC-плеер:

    • в форматах видео наведите курсор мыши на "Потоковое видео**";
    • правым кликом выберите "Копировать ссылку";
    • откройте VLC-плеер;
    • в меню выберите Медиа - Открыть URL - Сеть;
    • в поле ввода вставьте скопированную ссылку;
    • нажмите "Воспроизвести".

    Для скачивания потокового видео через VLC-плеер необходимо его конвертировать:

    • скопируйте адрес видео (URL);
    • в пункте “Медиа” проигрывателя VLC выберите “Открыть URL…” и вставьте ссылку на видео в поле ввода;
    • нажмите на стрелочку на кнопке “Воспроизвести” и в списке выберите пункт “Конвертировать”;
    • в строке “Профиль” выберите “Video - H.264 + MP3 (MP4)”;
    • нажмите кнопку “Обзор”, чтобы выбрать папку для сохранения конвертированного видео и нажмите кнопку “Начать”;
    • скорость конвертации зависит от разрешения и продолжительности видео.

    Внимание: данный способ скачивания больше не работает с большинством видеороликов с YouTube.

question iconСколько это всё стоит?arrow icon

    Нисколько. Наши сервисы абсолютно бесплатны для всех пользователей. Здесь нет PRO подписок, нет ограничений на количество или максимальную длину скачиваемого видео.