Advertisement
duarteguerreiro

Untitled

Mar 20th, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. "use strict";
  2.  
  3. (function()
  4. {
  5.     window.addEventListener("load", main);
  6. }());
  7. var tempo;
  8. var left=false;
  9. var right=false;
  10. var up=false;
  11. var down=false;
  12. function main()
  13. {
  14.     var canvas = document.getElementById("canvas");
  15.     var ctx = canvas.getContext("2d");
  16.     var spArray;  //sprite array
  17.  
  18.     canvas.addEventListener("initend", initEndHandler);
  19.     init(ctx);  //carregar todos os componentes
  20.  
  21.     //funções locais para gestão de eventos
  22.     function initEndHandler(ev)
  23.     {
  24.         //instalar listeners do rato   
  25.         ctx.canvas.addEventListener("click", cch);
  26.         window.addEventListener("keydown",teste);
  27.         window.addEventListener("keyup",KeyUp);
  28.         spArray = ev.spArray;
  29.         //iniciar a animação
  30.         startAnim(ctx, spArray);
  31.     }
  32.  
  33.     var cch = function(ev)
  34.     {
  35.         canvasClickHandler(ev, ctx, spArray);  
  36.     }
  37.     var teste = function(ev)
  38.     {
  39.         baixo(ev, ctx, spArray);   
  40.     }
  41. }
  42.  
  43.  
  44. //init: carregamento de componentes
  45. function init(ctx)
  46. {
  47.     var nLoad = 0;
  48.     var totLoad = 2;
  49.     var spArray = new Array(totLoad);
  50.     var img;
  51.  
  52.     //estilos de texto
  53.     ctx.fillStyle = "#993333";
  54.     ctx.font = "12px helvetica";   
  55.     ctx.textBaseline = "bottom";
  56.     ctx.textAlign = "center";  
  57.     //carregar imagens e criar sprites
  58.     var img = new Image();
  59.  
  60.     img.addEventListener("load", imgLoadedHandler);
  61.     img.id="car";
  62.     img.src = "resources/car.png";  //dá ordem de carregamento da imagem
  63.     var img2 = new Image();
  64.    
  65.     img2.addEventListener("load", imgLoadedHandler);
  66.     img2.id="turbo";
  67.     img2.src = "resources/turbo.png";  //dá ordem de carregamento da imagem
  68.     function imgLoadedHandler(ev)
  69.     {
  70.         var img = ev.target;
  71.         console.log(img.id);
  72.         switch(img.id){
  73.             case "car":
  74.                 var nw = img.naturalWidth;
  75.                 var nh = img.naturalHeight;
  76.                 var sp = new SpriteImage(0, 0, nw/4, nh/4, 1, false, img);
  77.                 spArray[0] = sp;
  78.                 break;
  79.            
  80.             case "turbo":
  81.  
  82.                 var nw = img.naturalWidth;
  83.                 var nh = img.naturalHeight;
  84.                 var sp = new SpriteImage(250,250, nw*1.5, nh*1.5, 1, false, img);
  85.                 spArray[1] = sp;
  86.                 break;
  87.            
  88.  
  89.         }
  90.  
  91.         nLoad++;       
  92.  
  93.         if (nLoad == totLoad)
  94.         {
  95.             var ev2 = new Event("initend");
  96.             ev2.spArray = spArray;
  97.             ctx.canvas.dispatchEvent(ev2);
  98.         }
  99.     }  
  100. }
  101.  
  102.  
  103. //iniciar animação
  104. function startAnim(ctx, spArray)
  105. {
  106.     draw(ctx, spArray);
  107.     animLoop(ctx, spArray);
  108.     tempo = performance.now();
  109. }
  110.  
  111.  
  112. //desenhar sprites
  113. function draw(ctx, spArray)
  114. {
  115.     var dim = spArray.length;
  116.  
  117.     for (let i = 0; i < dim; i++)
  118.     {
  119.         spArray[i].draw(ctx);
  120.     }
  121. }
  122.  
  123.  
  124. //apagar sprites
  125. function clear(ctx, spArray)
  126. {
  127.     var dim = spArray.length;
  128.  
  129.     for (let i = 0; i < dim; i++)
  130.     {
  131.         spArray[i].clear(ctx);
  132.     }
  133. }
  134.  
  135.  
  136. //-------------------------------------------------------------
  137. //--- controlo da animação: coração da aplicação!!!
  138. //-------------------------------------------------------------
  139. function animLoop(ctx, spArray)
  140. {  
  141.     var al = function(time)
  142.     {
  143.         animLoop(ctx, spArray);
  144.     }
  145.     var reqID = window.requestAnimationFrame(al);
  146.     var b = performance.now();
  147.     render(ctx, spArray, reqID,b);
  148. }
  149.  
  150.  
  151. //resedenho, actualizações, ...
  152. function render(ctx, spArray, reqID, dt)
  153. {
  154.     var cw = ctx.canvas.width;
  155.     var ch = ctx.canvas.height;
  156.  
  157.     //apagar canvas
  158.     ctx.clearRect(0, 0, cw, ch);
  159.  
  160.     //animar sprites
  161.     var sp = spArray[0];
  162.     if (sp.x + sp.width < cw)
  163.     {
  164.         if (sp.x + sp.width + sp.speed > cw)
  165.             sp.x = cw - sp.width;//para para depois mais embaixo por o clikable a true
  166.         else
  167.             sp.x = sp.x + sp.speed;    
  168.     }
  169.     else
  170.     {
  171.         window.cancelAnimationFrame(reqID);
  172.         /*console.log((ctx.canvas.width)/2);
  173.         spArray[1].x=(ctx.canvas.width)/2;
  174.         spArray[1].y=(ctx.canvas.length)/2; */
  175.         //make clickable
  176.         sp.clickable = true;
  177.     }
  178.  
  179.  
  180.     //redesenhar sprites e texto
  181.     var txt = "Time: " + Math.round(dt-tempo) + " msec";
  182.     ctx.fillText(txt, cw/2, ch);
  183.  
  184.     draw(ctx, spArray);
  185. }
  186.  
  187.  
  188. //-------------------------------------------------------------
  189. //--- interacção com o rato
  190. //-------------------------------------------------------------
  191. function canvasClickHandler(ev, ctx, spArray)
  192. {
  193.     if (spArray[0].clickedBoundingBox(ev))
  194.     {
  195.         spArray[0].reset(ev, ctx); 
  196.         animLoop(ctx, spArray);
  197.         tempo=performance.now();
  198.     }
  199. }
  200. function baixo(ev,ctx,spArray){
  201.     var keyName=ev.keyCode;
  202.     var sp=spArray[1];
  203.     console.log(sp.img.id);
  204.     console.log(keyName);
  205.     switch(keyName){
  206.         case 38:
  207.             console.log("entrou");
  208.             up=true;
  209.             render2(ev,ctx,sp);
  210.             break;
  211.         case 40:
  212.             down=true;
  213.             break;
  214.         case 37:
  215.             left=true;
  216.             render2(ev,ctx,sp);
  217.             break;
  218.         case 39:
  219.             right=true;
  220.             break;
  221.     }
  222.     /*  switch(keyName){
  223.         case "Arrowup":
  224.             console.log("entrou");
  225.             up=true;
  226.             render2(ev,ctx,sp);
  227.             break;
  228.         case "Arrowdown":
  229.             down=true;
  230.             break;
  231.         case "Arrowleft":
  232.             left=true;
  233.             render2(ev,ctx,sp);
  234.             break;
  235.         case "Arrowright":
  236.             right=true;
  237.             break;
  238.     }*/
  239. }
  240. function render2(ev,ctx,sp){
  241.         var keyName=ev.keyCode;
  242.         switch(keyName){
  243.             case 38:
  244.                 console.log("we in bois");
  245.                 sp.y=sp.y-sp.speed;
  246.                 break;
  247.             case 37:
  248.                 sp.x=sp.x-sp.speed;
  249.                 break;
  250.             }
  251.     }
  252. function KeyUp(ev){
  253.     var keyName=ev.key;
  254.     switch(keyName){
  255.         case "ArrowUp":
  256.             up=false;
  257.             break;
  258.         case "Arrowdown":
  259.             down=false;
  260.             break;
  261.         case "Arrowleft":
  262.             left=false;
  263.             break;
  264.         case "Arrowright":
  265.             right=false;
  266.             break;
  267.     }
  268. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement