Advertisement
Guest User

Untitled

a guest
Mar 31st, 2015
247
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.21 KB | None | 0 0
  1. var canvas = document.getElementById("gameCanvas");
  2. var context = canvas.getContext("2d");
  3.  
  4. window.addEventListener('keydown', function(evt) { onKeyDown(evt); }, false);
  5. window.addEventListener('keyup', function(evt) { onKeyUp(evt); }, false);
  6.  
  7. var startFrameMillis = Date.now();
  8. var endFrameMillis = Date.now();
  9. function getDeltaTime() // Only call this function once per frame
  10. {
  11. endFrameMillis = startFrameMillis;
  12. startFrameMillis = Date.now();
  13. var deltaTime = (startFrameMillis - endFrameMillis) * 0.001;
  14. if (deltaTime > 1) // Validate that the delta is within range
  15. {
  16. deltaTime = 1;
  17. }
  18. return deltaTime;
  19. }
  20.  
  21. var SCREEN_WIDTH = canvas.width;
  22. var SCREEN_HEIGHT = canvas.height;
  23. var ASTEROID_SPEED = 0.8;
  24. var PLAYER_SPEED = 1;
  25. var PLAYER_TURN_SPEED = 0.04;
  26. var BULLET_SPEED = 1.5;
  27.  
  28. var KEY_SPACE = 32;
  29. var KEY_LEFT = 37;
  30. var KEY_UP = 38;
  31. var KEY_RIGHT = 39;
  32. var KEY_DOWN = 40;
  33.  
  34. var grass = document.createElement("img");
  35. grass.src = "Assets/Sprites/grass.png";
  36.  
  37. var background = [];
  38.  
  39. for(var y=0;y<15;y++)
  40. {
  41. background[y] = [];
  42. for(var x=0; x<20; x++)
  43. background[y][x] = grass;
  44. }
  45.  
  46. var player = {
  47. image: document.createElement("img"),
  48. x: SCREEN_WIDTH/2,
  49. y: SCREEN_HEIGHT/2,
  50. width: 93,
  51. height: 80,
  52. directionX: 0,
  53. directionY: 0,
  54. angularDirection: 0,
  55. rotation: 0
  56. };
  57.  
  58. player.image.src = "Assets/Sprites/ship.png";
  59.  
  60. var asteroids = [];
  61.  
  62. function rand(floor, ceil)
  63. {
  64. return Math.floor( (Math.random()* (ceil-floor)) +floor );
  65. }
  66.  
  67. function spawnAsteroid()
  68. {
  69.  
  70. var type = rand(0, 3);
  71.  
  72.  
  73. var asteroid = {};
  74.  
  75. asteroid.image = document.createElement("img");
  76. asteroid.image.src = "rock_large.png";
  77. asteroid.width = 69;
  78. asteroid.height = 75;
  79. var x = SCREEN_WIDTH/2;
  80. var y = SCREEN_HEIGHT/2;
  81.  
  82. var dirX = rand(-10,10);
  83. var dirY = rand(-10,10);
  84. var magnitude = (dirX * dirX) + (dirY * dirY);
  85. if(magnitude != 0)
  86. {
  87. var oneOverMag = 1 / Math.sqrt(magnitude);
  88. dirX *= oneOverMag;
  89. dirY *= oneOverMag;
  90. }
  91.  
  92. var movX = dirX * SCREEN_WIDTH;
  93. var movY = dirY * SCREEN_HEIGHT;
  94.  
  95. asteroid.x = x + movX;
  96. asteroid.y = y + movY;
  97.  
  98. asteroid.velocityX = -dirX * ASTEROID_SPEED;
  99. asteroid.velocityY = -dirY * ASTEROID_SPEED;
  100.  
  101. asteroids.push(asteroid);
  102. }
  103.  
  104. var bullet = [];
  105.  
  106. function playerShoot()
  107. {
  108. var bullet = {
  109. image: document.createElement("img"),
  110. x: player.x,
  111. y: player.y,
  112. width: 5,
  113. height: 5,
  114. velocityX: 0,
  115. velocityY: 0
  116. };
  117.  
  118. bullet.image.src = "bullet.png";
  119.  
  120. var velX = 0;
  121. var velY = 1;
  122.  
  123. var s = Math.sin(player.rotation);
  124. var c = Math.cos(player.rotation);
  125.  
  126. var xVel = (velX * c) - (velY * s);
  127. var yVel = (velX * s) + (velY * c);
  128.  
  129. bullet.velocityX = xVel * BULLET_SPEED;
  130. bullet.velocityY = yVel * BULLET_SPEED;
  131.  
  132. bullets.push(bullet);
  133. }
  134.  
  135. function onKeyDown(event)
  136. {
  137. if(event.keyCode == KEY_UP)
  138. {
  139. player.directionY = 1;
  140. }
  141. if(event.keyCode == KEY_DOWN)
  142. {
  143. player.directionY = -1;
  144. }
  145. if(event.keyCode == KEY_LEFT)
  146. {
  147. player.angularDirection = -1;
  148. }
  149. if(event.keyCode == KEY_RIGHT)
  150. {
  151. player.angularDirection = 1;
  152. }
  153. }
  154.  
  155. function onKeyUp(event)
  156. {
  157. if(event.keyCode == KEY_UP)
  158. {
  159. player.directionY = 0;
  160. }
  161. if(event.keyCode == KEY_DOWN)
  162. {
  163. player.directionY = 0;
  164. }
  165. if(event.keyCode == KEY_LEFT)
  166. {
  167. player.angularDirection = 0;
  168. }
  169. if(event.keyCode == KEY_RIGHT)
  170. {
  171. player.angularDirection = 0;
  172. }
  173.  
  174. if(event.keyCode == KEY_SPACE)
  175. {
  176. playerShoot();
  177. }
  178. }
  179.  
  180. function intersects(x1, y1, w1, h1, x2, y2, w2, h2)
  181. {
  182. if(y2 + h2 < y1 ||
  183. x2 + w2 < x1 ||
  184. x2 > x1 + w1 ||
  185. y2 > y1 + h1)
  186. {
  187. return false;
  188. }
  189. return true;
  190. }
  191.  
  192. function run()
  193. {
  194. context.fillStyle = "#ccc";
  195. context.fillRect(0, 0, canvas.width, canvas.height);
  196.  
  197. var deltaTime = getDeltaTime();
  198.  
  199. for(var y=0; y<15; y++)
  200. {
  201. for(var x=0; x<20; x++)
  202. {
  203. context.drawImage(background[y][x], x*32, y*32);
  204. }
  205. }
  206.  
  207. if(bullet.isDead == false)
  208. {
  209. bullet.x += bullet.velocityX;
  210. bullet.y += bullet.velocityY;
  211. context.drawImage(bullet.image,
  212. bullet.x - bullet.width/2,bullet.y - bullet.height/2);
  213. }
  214.  
  215. var s = Math.sin(player.rotation);
  216. var c = Math.cos(player.rotation);
  217.  
  218. var xDir = (player.directionX * c) - (player.directionY * s);
  219. var yDir = (player.directionX * s) + (player.directionY * c);
  220. var xVel = xDir * PLAYER_SPEED;
  221. var yVel = yDir * PLAYER_SPEED;
  222.  
  223. player.x += xVel;
  224. player.y += yVel;
  225.  
  226. player.rotation += player.angularDirection * PLAYER_TURN_SPEED;
  227.  
  228. context.save();
  229. context.translate(player.x, player.y);
  230. context.rotate(player.rotation);
  231. context.drawImage(
  232. player.image, -player.width/2, -player.height/2);
  233. context.restore();
  234.  
  235. var velocityX = asteroid.directionX * ASTEROID_SPEED;
  236. var velocityY = asteroid.directionY * ASTEROID_SPEED;
  237. asteroid.x += velocityX;
  238. asteroid.y += velocityY;
  239. context.drawImage(asteroid.image,
  240. asteroid.x - asteroid.width/2,
  241. asteroid.y - asteroid.height/2);
  242.  
  243. for(var i=0; i<asteroids.length; i++)
  244. {
  245. asteroids[i].x = asteroids[i].x + asteroids[i].velocityX;
  246. asteroids[i].y = asteroids[i].y + asteroids[i].velocityY;
  247. }
  248.  
  249. for(var i=0; i<asteroids.length; i++)
  250. {
  251. context.drawImage(asteroids[i].image, asteroids[i].x, asteroids[i].y);
  252. }
  253.  
  254. spawnTimer -= deltaTime;
  255. if(spawnTimer <= 0)
  256. {
  257. spawnTimer = 1;
  258. spawnAsteroid();
  259. }
  260.  
  261. for(var i=0; i<asteroids.length; i++)
  262. {
  263. for(var j=0; j<bullets.length; j++)
  264. {
  265. if(intersects(
  266. bullets[j].x, bullets[j].y,
  267. bullets[j].width, bullets[j].height,
  268. asteroids[i].x, asteroids[i].y,
  269. asteroids[i].width, asteroids[i].height) == true)
  270. {
  271. asteroids.splice(i, 1);
  272. bullets.splice(j, 1);
  273. break;
  274. }
  275. }
  276. }
  277. }
  278.  
  279. //60FPS framework
  280. (function()
  281. {
  282. var onEachFrame;
  283.  
  284. if (window.requestAnimationFrame)
  285. {
  286. onEachFrame = function(cb)
  287. {
  288. var _cb = function() { cb(); window.requestAnimationFrame(_cb); }
  289. _cb();
  290. };
  291.  
  292. }
  293. else if (window.mozRequestAnimationFrame)
  294. {
  295. onEachFrame = function(cb) {
  296. var _cb = function() { cb(); window.mozRequestAnimationFrame(_cb); }
  297. _cb();
  298. };
  299.  
  300. }
  301. else
  302. {
  303. onEachFrame = function(cb)
  304. {
  305. setInterval(cb, 1000 / 60);
  306. }
  307. }
  308.  
  309. window.onEachFrame = onEachFrame;
  310. })();
  311.  
  312. window.onEachFrame(run);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement