Advertisement
ipsBruno

(Javascript) Queda-Livre em Canvas!

Feb 11th, 2014
240
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2. *  Simples simulação de queda livre
  3. *  O corpo acelerá conforme a gravidade instruída, até chegar no chão!
  4. */
  5.  
  6. <canvas style="background-color:black" id='canvas' width=800 height=600></canvas>
  7.  
  8. <script>
  9.     cnv = document.getElementById('canvas').getContext('2d')
  10.  
  11.     cnv.fillStyle="white"
  12.  
  13.     // representar o tamanho máximo da tela onde movimenta os quadrados
  14.  
  15.     var w = 800
  16.  
  17.     var h = 600
  18.  
  19.     // tempo para cada frame
  20.     var t = 15;
  21.  
  22.     // Aqui cria as arrays que irão armazenar a posição dos quadrados (importante)
  23.     var y = new Array(100, 0);
  24.  
  25.     // Aqui representará a velocidade dos nossos quadrados
  26.     dy = 1
  27.  
  28.     // aceleração da gravidade ao segundo
  29.     g = 10;
  30.  
  31.  
  32.     // Chamar função recursiva que vai executar o movimento dos quadrados
  33.     executarMovimento()
  34.  
  35.  
  36.  
  37.     // Criando a função
  38.  
  39.     function executarMovimento() {
  40.  
  41.         // Deletar os quadrados já criados
  42.  
  43.         cnv.clearRect(0,0,w,h)
  44.  
  45.        
  46.         // Verificar se o quadrado e sua posição ultrapassaram o limite da área do canvas, representado por H
  47.         // ou seja, checar se o objeto chegou ao chão!
  48.  
  49.         if(y[1] + dy + 25 > h) {
  50.  
  51.             // caso passou, parar o movimento
  52.             dy = 0;
  53.        
  54.         }
  55.  
  56.  
  57.         // adicionar a aceleração. No caso é gravidade / 1000 (1 segundo em miléssimos) multiplicado por T. Número de quadros ao segundo!
  58.         dy += g / 1000 * t;
  59.  
  60.         // Adicionar nova coordenada conforme a velocidade
  61.         y[1] += dy  
  62.  
  63.         // Desenhar o quadrado de 25x25    
  64.         cnv.fillRect(20, y[1], 25, 25)
  65.        
  66.  
  67.         // Chamar novamente a função para executar o próximo movimento      
  68.         setTimeout(executarMovimento, t)
  69.  
  70.       }
  71.  
  72. </script>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement