Advertisement
Guest User

Full code

a guest
Jan 13th, 2015
233
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
HTML 4.38 KB | None | 0 0
  1. <body></body>
  2. <script>
  3. var canvas = document.createElement("canvas");
  4. var ctx = canvas.getContext("2d");
  5.  
  6. canvas.width = 500;
  7. canvas.height = 350;
  8. canvas.style.border = "thin solid black";
  9.  
  10. var boxes = [];
  11. var player = createAABB(250, 175, 15, 20);
  12.  
  13. boxes.push(player);
  14.  
  15. var level = "x                  x" +
  16.             "x  xx              x" +
  17.             "x xx               x" +
  18.             "xxx                x" +
  19.             "x   xxxx           x" +
  20.             "x               xxxx" +
  21.             "x  xx              x" +
  22.             "x                  x" +
  23.             "x xx           xxxxx" +
  24.             "x                  x" +
  25.             "xxxxxxxx      xxxxxx" +
  26.             "x                  x" +
  27.             "x                  x" +
  28.             "x                  x";
  29.  
  30. for (var i = 0; i < level.length; i++) {
  31.  if (level[i] == "x")
  32.    boxes.push(createAABB(12.5 + (i % 20) * 25, 12.5 + ~~(i / 20) * 25, 25, 25));
  33. }
  34.  
  35. function createAABB(x, y, width, height) {
  36.  return {x: x, y: y, width: width, height: height, halfWidth: width / 2, halfHeight: height / 2};
  37. }
  38.  
  39. function resolveCollisionX(a, b, dX, dY) {
  40.  var sum = createAABB(b.x, b.y, b.width + a.width, b.height + a.height);
  41.  
  42.  var time = 1;
  43.  
  44.  if (dX > 0) {
  45.     if (a.x + dX > sum.x - sum.halfWidth) {
  46.       time = ((sum.x - sum.halfWidth) - a.x) / dX;
  47.      
  48.       if (a.y + dY * time > sum.y - sum.halfHeight && a.y + dY * time < sum.y + sum.halfHeight && time >= 0) {
  49.        return time;
  50.       }
  51.     }
  52.   } else if (dX < 0) {
  53.    if (a.x + dX < sum.x + sum.halfWidth) {
  54.      time = ((sum.x + sum.halfWidth) - a.x) / dX;
  55.      
  56.      if (a.y + dY * time > sum.y - sum.halfHeight && a.y + dY * time < sum.y + sum.halfHeight && time >= 0) {
  57.        return time;
  58.       }
  59.     }
  60.   }
  61.  
  62.   return 1;
  63. }
  64.  
  65. function resolveCollisionY(a, b, dX, dY) {
  66.   var sum = createAABB(b.x, b.y, b.width + a.width, b.height + a.height);
  67.  
  68.   var time = 1;
  69.  
  70.   if (dY > 0) {
  71.     if (a.y + dY > sum.y - sum.halfHeight) {
  72.       time = ((sum.y - sum.halfHeight) - a.y) / dY;
  73.      
  74.       if (a.x + dX * time > sum.x - sum.halfWidth && a.x + dX * time < sum.x + sum.halfWidth && time >= 0) {
  75.        return time;
  76.       }
  77.     }
  78.   } else if (dY < 0) {
  79.    if (a.y + dY < sum.y + sum.halfHeight) {
  80.      time = ((sum.y + sum.halfHeight) - a.y) / dY;
  81.      
  82.      if (a.x + dX * time > sum.x - sum.halfWidth && a.x + dX * time < sum.x + sum.halfWidth && time >= 0) {
  83.        return time;
  84.       }
  85.     }
  86.   }
  87.  
  88.   return 1;
  89. }
  90.  
  91. var mouseX = 0, mouseY = 0;
  92.  
  93. var keys = [];
  94.      
  95. document.addEventListener("keydown", function (event) {
  96.   keys[event.keyCode] = true;
  97. });
  98.  
  99. document.addEventListener("keyup", function (event) {
  100.   keys[event.keyCode] = false;
  101. });
  102.  
  103. var vX = 0, vY = 0, g = false;
  104.  
  105. function loop() {  
  106.   ctx.clearRect(0, 0, 500, 350);
  107.  
  108.   if (keys[37]) { // Left arrow key
  109.     vX -= 1.5;
  110.   }
  111.  
  112.   if (keys[32] && g) { // Space key
  113.    vY = -8.5;
  114.   }
  115.  
  116.   if (keys[39]) { // Right arrow key
  117.     vX += 1.5;
  118.   }
  119.  
  120.   vY += 0.55;
  121.  
  122.   vX *= 0.7;
  123.  
  124.   var dX = vX, dY = vY;
  125.  
  126.   var xResolution = 1, yResolution = 1;
  127.   var xBox, yBox;
  128.  
  129.   for (var i = 1; i < boxes.length; i++) {
  130.    var newXResolution = resolveCollisionX(player, boxes[i], dX, dY);
  131.    var newYResolution = resolveCollisionY(player, boxes[i], dX, dY);
  132.  
  133.    xResolution = Math.min(xResolution, newXResolution);
  134.    yResolution = Math.min(yResolution, newYResolution);
  135.    
  136.    if (xResolution == newXResolution) xBox = i;
  137.    if (yResolution == newYResolution) yBox = i;
  138.  }
  139.  
  140.  if (yResolution < 1) {
  141.    xResolution = resolveCollisionX(player, boxes[xBox], dX, 0);
  142.  }
  143.  
  144.  if (xResolution < 1) {
  145.    yResolution = resolveCollisionY(player, boxes[yBox], 0, dY);
  146.  }
  147.  
  148.  player.x += dX * xResolution;
  149.  player.y += dY * yResolution;
  150.  
  151.  if (dY >= 0 && yResolution < 1) {
  152.    g = true;
  153.     vY = 0;
  154.   } else {
  155.     g = false;
  156.   }
  157.  
  158.   if (player.y > 350) {
  159.     while (player.y > 0) {
  160.       player.y -= 350;
  161.     }
  162.   }
  163.  
  164.   for (var i = 0; i < boxes.length; i++) {
  165.    ctx.fillRect(boxes[i].x - boxes[i].halfWidth, boxes[i].y - boxes[i].halfHeight, boxes[i].width, boxes[i].height);
  166.  }
  167.  
  168.  ctx.fillText(g, 10, 20);
  169.  ctx.fillText(xResolution, 10, 40);
  170.  ctx.fillText(yResolution, 10, 60);
  171.  
  172.  window.requestAnimationFrame(loop);
  173. }
  174.  
  175. loop();
  176.  
  177. document.body.appendChild(canvas);
  178. </script>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement