dir.by  
  Поиск  
Компьютер, программы
Html & CSS
 HTML <canvas> drawing a snake with lines moveTo, lineTo 
посмотрели 4372 раз
обновлено: 15 Augusta 2020
Example we look, we test

Code. Create a new 1.html file
  Html     Let's write the code in the file 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 Functions -->
     <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>

     <!-- master code -->
     <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)
          {
               <!-- clear everything on canvas -->
               context.clearRect(0, 0, canvas.width, canvas.height);
         
               // Draw
               drawSnake(context, snake);

               // change position
               updateSnake(canvas, snake);
         
               // request new frame
               requestAnimFrame(function(){
                    MyAnimation(context, canvas, loadedImages, snake);
               });
          }

          <!-- context for drawing -->
          var canvas = document.getElementById('canvas1');
          var context = canvas.getContext('2d');

          <!-- initializing an animation -->
          AnimationInit();

          <!-- data -->
          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
               }]
          };

          <!-- start endless animation -->
          MyAnimation(context, canvas, null, snake);

     </script>
</body>

</html>
 
← Previous topic
HTML <canvas> how to get mouse coordinates ? Determine the position of the mouse.
 
Next topic →
CSS description
 
Your feedback ... Comments ...
   
Your Name
Your comment (www links can only be added by a logged-in user)

  Объявления  
  Объявления  
 
HTML elements
HTML tag <a> link to go to another page
HTML tag <abbr> shows an abbreviated name, if you let the mouse down there will be a pop-up inscription
HTML tags fieldset and legend. This is a frame with a title
HTML tag <!-- --> comment
style="border" in the HTML
<BR>
HTML search for an element, elements
document.querySelector(...) is a JavaScript method for finding an element from document (i.e. in all HTML)
yourElement.querySelectorAll(...) is a JavaScript method for finding elements inside another HTML element
<BR>
HTML svg (vector graphics for drawing lines, rectangles, ellipses, ...)
<svg> vector graphics, drawing a line<line>, rectangle <rect>, circle<circle>, text<text>
<BR>
HTML canvas (drawing pictures, text, shapes)
HTML <canvas> drawing a rectangle
HTML drawing <canvas> lines by clicking on the Canvas
HTML <canvas> we draw pictures
HTML <canvas> we draw a picture with a rotation
HTML <canvas> draw a picture with horizontal reflection
HTML <canvas> we draw a picture and text
HTML <canvas> draw a picture many times in a rectangle (template)
HTML <canvas> how to get mouse coordinates ? Determine the position of the mouse.
HTML <canvas> drawing a snake with lines moveTo, lineTo
CSS
CSS description
After modifying the file css , the browser displays old styles over and over again. Why?
Books to study CSS
CSS flex (the element can stretch or shrink and thus fill the free space)
What is CSS flex
Freeze
The header in the table is always visible when scrolling | freeze header in table | HTML
Div is always visible when scrolling (position:fixed, position:sticky) | freeze div | HTML
Do Popup using HTML and Javascript
How to make a Popup window in a HTML page | Javascript, HTML, CSS
Motion and animation of pictures
Animation of the little man on the spot. For <div>animation, we use CSS styles: "animation", "background-image", "background-position", "keyframes"
Animation of a man in motion (sprite). For <div><img>animation we use CSS styles: "animation", "background-image", "background-position", "keyframes"
Draw a picture with movement. Use the HTML element<canvas>. Use JavaScript for movement: var img = new Image(), img.src = url, drawImage, timer, window.setInterval
Drawing a picture with movement and animation (sprite). Use the HTML element <canvas>. Use JavaScript for movement: var img = new Image(), img.src = url, drawImage, timer, window.setInterval
Web page on the phone
I open a web page on my phone in Google Chrome. Why does double-clicking increase the page size?
Layout, page design
What the Front-end development?
How to Identify a Device (Tablet, Computer, Phone) Currently Used in JavaScript, HTML
How to make your site work on a phone, tablet, computer using css media and max-device-width and min-device-width | HTML | CSS
How to make your website fit in size on your phone, tablet? (HTML meta with attribute name="viewport")
Correct layout HTML. Bad to use table. You need to use div
What is Adaptive design? What is responsive design?
Change the color of the scrollbar for the HTML page. Using CSS
WWW sites for learning
Sites to explore HTML

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