dir.by  
Программирование, разработка, тестирование
Html & CSS
HTML <canvas> рисуем змею линиями moveTo, lineTo
  Посмотрели 3336 раз(а)    
 HTML <canvas> рисуем змею линиями moveTo, lineTo 
последнее обновление: 15 августа 2020
Пример смотрим, тестируем

Код. Создадим новый 1.html файл
  Html     Напишем код в файле 1.html
<html>

<!-- заголовок -->
<head>
<meta charset="utf-8">
<title>Example</title>
</head>

<!-- страница -->
<body>

     <!-- HTML canvas -->
     <canvas id="canvas1" width='530px' height='320px' style='border: 1px solid #9C9898;'></canvas>

     <!-- JavaScript функции -->
     <script>
          function AnimationInit()
          {
               window.requestAnimFrame = (function(callback) {
                    return window.requestAnimationFrame ||
                         window.webkitRequestAnimationFrame ||
                         window.mozRequestAnimationFrame ||
                         window.oRequestAnimationFrame ||
                         window.msRequestAnimationFrame ||
                         function(callback)
                         {
                              window.setTimeout(callback, 1000 / 60); // 60 time in 1 second (1000 ms)
                         };
               })();
          }

     </script>

     <!-- главный код -->
     <script>
          function getRandTheta(){
               return Math.random() * 2 * Math.PI;
          }

          function updateSnake(canvas, snake)
          {
               var maxVariance = 0.2;
               var snakeSpeed = 200; //px / s
               var segmentsPerSecond = snakeSpeed / snake.segmentLength;
               var segments = snake.segments;
               var date = new Date();
               var time = date.getTime();
               var timeDiff = (time - snake.lastUpdateTime);

               if (timeDiff > 1000 / segmentsPerSecond)
               {
                    var head = segments[segments.length - 1];
                    var neck = segments[segments.length - 2];

                    var direction = snake.direction;
                    var newHeadX = head.x + direction.x * snake.segmentLength;
                    var newHeadY = head.y + direction.y * snake.segmentLength;

                    // change direction if collision occurs
                    if (newHeadX > canvas.width || newHeadX < 0)
                    {
                         direction.x *= -1;
                    }
                    if (newHeadY > canvas.height || newHeadY < 0)
                    {
                         direction.y *= -1;
                    }

                    // add new segment
                    segments.push({
                         x: newHeadX,
                         y: newHeadY
                    });

                    if (segments.length > snake.numSegments) {
                         segments.shift();
                    }

                    var variance = ((maxVariance / 2) - Math.random() * maxVariance);

                    direction.x += variance;
                    direction.y -= variance;

                    // update direction vector
                    if (direction.x > 1) {
                         direction.x = 1;
                    }
                    if (direction.x < -1) {
                         direction.x = -1;
                    }

                    // dampering - try to keep direction vectors around -0.5 and +0.5
                    direction.x *= Math.abs(direction.x) > 0.5 ? (1 - 0.01) : (1 + 0.01);
                    direction.y *= Math.abs(direction.y) > 0.5 ? (1 - 0.01) : (1 + 0.01);

                    snake.lastUpdateTime = time;
               }
          }

          function drawSnake(context, snake)
          {
               var segments = snake.segments;
               var tail = segments[0];
               context.beginPath();
               context.moveTo(tail.x, tail.y);

               for (var n = 1; n < segments.length; n++)
               {
                    var segment = segments[n];
                    context.lineTo(segment.x, segment.y);
               }

               context.lineWidth = 10;
               context.lineCap = "round";
               context.lineJoin = "round";
               context.strokeStyle = "green";
               context.stroke();
          }

          function MyAnimation(context, canvas, loadedImages, snake)
          {
               <!-- очищаем все на canvas -->
               context.clearRect(0, 0, canvas.width, canvas.height);
         
               // рисуем
               drawSnake(context, snake);

               // меняем позицию
               updateSnake(canvas, snake);
         
               // request new frame
               requestAnimFrame(function(){
                    MyAnimation(context, canvas, loadedImages, snake);
               });
          }

          <!-- context для рисования -->
          var canvas = document.getElementById('canvas1');
          var context = canvas.getContext('2d');

          <!-- инициализация анимации -->
          AnimationInit();

          <!-- данные -->
          var segmentLength = 2; // px
          var headX = canvas.width / 2;
          var headY = canvas.height / 2;

          snake = {
               segmentLength: 2,
               lastUpdateTime: 0,
               numSegments: 50,
               // moving to the right
               direction: {
                    x: 1,
                    y: 0
               },
               segments: [{
                    // tail
                    x: headX + segmentLength,
                    y: headY
               }, {
                    // head
                    x: headX,
                    y: headY
               }]
          };

          <!-- запускаем бесконечную анимацию -->
          MyAnimation(context, canvas, null, snake);

     </script>
</body>

</html>
 
← Предыдущая тема
HTML <canvas> как получить координаты мыши ? Определяем позицию мыши.
 
Следующая тема →
CSS описание
 
Ваши Отзывы ... комментарии ...
   
Вашe имя
Ваш комментарий (www ссылки может добавлять только залогиненный пользователь)

Экскурсии по Москве Экскурсии по Москве: пешеходные, автобусные и речные прогулки на любой вкус
  Объявления  
  Объявления  
 
HTML элементы
HTML тег <a> ссылка для перехода на другую страницу
HTML тег <abbr> показывает сокращенное название, если подвести мышку будет всплывающая надпись
HTML теги fieldset и legend. Это рамка с заголовком
HTML тег <!-- --> комментарий
style="border" В HTML

HTML поиск элемента, элементов
document.querySelector(...) это JavaScript метод для поиска элемента из document (то есть во всем HTML)
yourElement.querySelectorAll(...) это JavaScript метод для поиска элементов внутри другого HTML элемента

HTML svg (векторная графика для рисования линий, прямоугольников, эллипсов, ...)
<svg> векторная графика, рисуем линию<line>, прямоугольник <rect>, круг<circle>, текст<text>

HTML canvas (рисование картинок, текста, фигур)
HTML <canvas> рисуем прямоугольник
HTML <canvas> рисуем линии по нажатию мышкой на Canvas
HTML <canvas> рисуем картинки
HTML <canvas> рисуем картинку с поворотом
HTML <canvas> рисуем картинку с горизонтальным отражением
HTML <canvas> рисуем картинку и текст
HTML <canvas> рисуем картинку много раз в прямоугольнике (шаблон)
HTML <canvas> как получить координаты мыши ? Определяем позицию мыши.
HTML <canvas> рисуем змею линиями moveTo, lineTo
CSS
CSS описание
После изменения файла css , в браузере раз за разом отображаются старые стили. Почему?
Книги для изучения CSS
CSS flex (элемент может растягиваться или сжиматься и таким образом заполнять свободное пространство)
Что такое CSS flex
Freeze
Шапка в таблице всегда видна при скролинге | freeze header in table | HTML
Div всегда виден при скролинге (position:fixed, position:sticky) | freeze div | HTML
Делаем Popup используя HTML и Javascript
Как сделать Popup окно в HTML странице | Javascript, HTML, CSS
Движение и анимация картинок
Анимация человечка на месте. Используем HTML элемент <div>. Для анимации используем CSS стили: "animation", "background-image", "background-position", "keyframes"
Анимация человечка в движении (sprite). Используем HTML элементы <div>, <img>. Для анимации используем CSS стили: "animation", "background-image", "background-position", "keyframes"
Рисуем картинку с движением. Используем HTML элемент <canvas>. Для движения используем JavaScript: var img = new Image(), img.src = url, drawImage, timer, window.setInterval
Рисуем картинку с движением и анимацией (sprite). Используем HTML элемент <canvas>. Для движения используем JavaScript: var img = new Image(), img.src = url, drawImage, timer, window.setInterval
Web страница на телефоне
Открываю web страницу на телефоне в Google Chrome. Почему при двойном нажатии размер страницы увеличивается?
Верстка, дизайн страницы
Что такое Front-end разработка?
Как определить устройство (планшет, компьютер, телефон) сейчас используется в JavaScript, HTML
Как сделать чтобы ваш сайт работал на телефоне, планшете, компьютере используем css media и max-device-width и min-device-width | HTML | CSS
Как сделать чтобы ваш сайт соответствовал по размерам на телефоне, планшете ? (HTML meta с атрибутом name='viewport')
Правильная верстка HTML. Плохо использовать table. Нужно использовать div
Что такое Adaptive design (адаптивный дизайн)? Что такое Responsive design (отзывчивый дизайн) ?
Меняем цвет scrollbar (полосы прокрутки) для HTML страницы. Используем CSS
WWW сайты для изучения
Сайты для изучения HTML

  Ваши вопросы присылайте по почте: info@dir.by  
Яндекс.Метрика