Advertisement
Guest User

Untitled

a guest
Apr 1st, 2015
251
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.29 KB | None | 0 0
  1. var canvas = document.getElementById("gameCanvas");
  2. var ctx = 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.  
  24. var grass = document.createElement("img");
  25. grass.src = "grass.png";
  26.  
  27. var background = [];
  28.  
  29. for(var y=0;y<15;y++)
  30. {
  31. background[y] = [];
  32. for(var x=0; x<20; x++)
  33. background[y][x] = grass;
  34. }
  35.  
  36. var ASTEROID_SPEED = 0.8;
  37. var PLAYER_SPEED = 2;
  38. var PLAYER_TURN_SPEED = 0.08;
  39. var BULLET_SPEED = 3;
  40.  
  41. var player = {
  42. image: document.createElement("img"),
  43. x: SCREEN_WIDTH/2,
  44. y: SCREEN_HEIGHT/2,
  45. width: 93,
  46. height: 80,
  47. directionX: 0,
  48. directionY: 0,
  49. angularDirection: 0,
  50. rotation: 0,
  51. isDead: false,
  52. };
  53.  
  54. player.image.src = "ship.png";
  55.  
  56. var asteroids = [];
  57.  
  58. var bullets = [];
  59.  
  60. function playerShoot()
  61. {
  62. var bullet = {
  63. image: document.createElement("img"),
  64. x: player.x,
  65. y: player.y,
  66. width: 5,
  67. height: 5,
  68. velocityX: 0,
  69. velocityY: 0,
  70. };
  71.  
  72. bullet.image.src = "bullet.png";
  73.  
  74. var velX = 0;
  75. var velY = 1;
  76.  
  77. var s = Math.sin(player.rotation);
  78. var c = Math.cos(player.rotation);
  79.  
  80. var xVel = (velX * c) - (velY * s);
  81. var yVel = (velX * s) + (velY * c);
  82.  
  83. bullet.velocityX = xVel * BULLET_SPEED;
  84. bullet.velocityY = yVel * BULLET_SPEED;
  85.  
  86. bullets.push(bullet);
  87. }
  88.  
  89. var KEY_SPACE = 32;
  90. var KEY_LEFT = 37;
  91. var KEY_UP = 38;
  92. var KEY_RIGHT = 39;
  93. var KEY_DOWN = 40;
  94. var KEY_A = 65;
  95. var KEY_S = 83;
  96.  
  97. var shootTimer = 0;
  98.  
  99. function onKeyDown(event)
  100. {
  101. if(event.keyCode == KEY_UP)
  102. {
  103. player.directionY = 1;
  104. }
  105. if(event.keyCode == KEY_DOWN)
  106. {
  107. player.directionY = -1;
  108. }
  109. if(event.keyCode == KEY_LEFT)
  110. {
  111. player.angularDirection = -1;
  112. }
  113. if(event.keyCode == KEY_RIGHT)
  114. {
  115. player.angularDirection = 1;
  116. }
  117. if(event.keyCode == KEY_A)
  118. {
  119. player.directionX = 1;
  120. }
  121. if(event.keyCode == KEY_S)
  122. {
  123. player.directionX = -1;
  124. }
  125. if(event.keyCode == KEY_SPACE && shootTimer <= 0)
  126. {
  127. shootTimer += 0.3;
  128. playerShoot();
  129. }
  130. }
  131. function onKeyUp(event)
  132. {
  133. if(event.keyCode == KEY_UP)
  134. {
  135. player.directionY = 0;
  136. }
  137. if(event.keyCode == KEY_DOWN)
  138. {
  139. player.directionY = 0;
  140. }
  141. if(event.keyCode == KEY_LEFT)
  142. {
  143. player.angularDirection = 0;
  144. }
  145. if(event.keyCode == KEY_RIGHT)
  146. {
  147. player.angularDirection = 0;
  148. }
  149. if(event.keyCode == KEY_A)
  150. {
  151. player.directionX = 0;
  152. }
  153. if(event.keyCode == KEY_S)
  154. {
  155. player.directionX = 0;
  156. }
  157. }
  158.  
  159. function intersects(x1, y1, w1, h1, x2, y2, w2, h2)
  160. {
  161. if(y2 + h2 < y1 ||
  162. x2 + w2 < x1 ||
  163. x2 > x1 + w1 ||
  164. y2 > y1 + h1)
  165. {
  166. return false;
  167. }
  168. return true;
  169. }
  170.  
  171. function run()
  172. {
  173. ctx.fillStyle = "#ccc";
  174. ctx.fillRect(0,0, canvas.width, canvas.height);
  175.  
  176. var deltaTime = getDeltaTime();
  177.  
  178. for(var y=0; y<15; y++)
  179. {
  180. for(var x=0; x<20; x++)
  181. {
  182. ctx.drawImage(background[y][x], x*32, y*32);
  183. }
  184. }
  185.  
  186. function rand(floor, ceil)
  187. {
  188. return Math.floor( (Math.random()* (ceil-floor)) +floor );
  189. }
  190.  
  191. function spawnAsteroid()
  192. {
  193. var type = rand(0, 3);
  194.  
  195. var asteroid = {};
  196.  
  197. asteroid.image = document.createElement("img");
  198. asteroid.image.src = "rock_large.png";
  199. asteroid.width = 69;
  200. asteroid.height = 75;
  201.  
  202. var x = SCREEN_WIDTH/2;
  203. var y = SCREEN_HEIGHT/2;
  204.  
  205. var dirX = rand(-10,10);
  206. var dirY = rand(-10,10);
  207.  
  208. var magnitude = (dirX * dirX) + (dirY * dirY);
  209. if(magnitude != 0)
  210. {
  211. var oneOverMag = 1 / Math.sqrt(magnitude);
  212. dirX *= oneOverMag;
  213. dirY *= oneOverMag;
  214. }
  215. var movX = dirX * SCREEN_WIDTH;
  216. var movY = dirY * SCREEN_HEIGHT;
  217.  
  218. asteroid.x = x + movX;
  219. asteroid.y = y + movY;
  220.  
  221. asteroid.velocityX = -dirX * ASTEROID_SPEED;
  222. asteroid.velocityY = -dirY * ASTEROID_SPEED;
  223.  
  224. asteroids.push(asteroid);
  225. }
  226.  
  227.  
  228.  
  229. if(shootTimer > 0)
  230. shootTimer -= deltaTime;
  231.  
  232. for(var i=0; i<bullets.length; i++)
  233. {
  234. bullets[i].x += bullets[i].velocityX;
  235. bullets[i].y += bullets[i].velocityY;
  236. }
  237.  
  238. for(var i=0; i<bullets.length; i++)
  239. {
  240. if(bullets[i].x < -bullets[i].width ||
  241. bullets[i].x > SCREEN_WIDTH ||
  242. bullets[i].y < -bullets[i].height ||
  243. bullets[i].y > SCREEN_HEIGHT)
  244. {
  245. bullets.splice(i, 1);
  246.  
  247. break;
  248. }
  249. }
  250.  
  251. for(var i=0; i<bullets.length; i++)
  252. {
  253. ctx.drawImage(bullets[i].image,
  254. bullets[i].x - bullets[i].width/2,
  255. bullets[i].y - bullets[i].height/2);
  256. }
  257.  
  258. for(var i=0; i<asteroids.length; i++)
  259. {
  260. asteroids[i].x = asteroids[i].x + asteroids[i].velocityX // *deltaTime;
  261. asteroids[i].y = asteroids[i].y + asteroids[i].velocityY // *deltaTime;
  262. }
  263.  
  264. for(var i=0; i<asteroids.length; i++)
  265. {
  266. ctx.drawImage(asteroids[i].image, asteroids[i].x, asteroids[i].y);
  267. }
  268.  
  269. var spawnTimer = 0;
  270. spawnTimer -= deltaTime;
  271. if(spawnTimer <= 0)
  272. {
  273. spawnTimer = 1;
  274. spawnAsteroid();
  275. }
  276.  
  277. var s = Math.sin(player.rotation);
  278. var c = Math.cos(player.rotation);
  279.  
  280. var xDir = (player.directionX * c) - (player.directionY * s);
  281. var yDir = (player.directionX * s) + (player.directionY * c);
  282. var xVel = xDir * PLAYER_SPEED;
  283. var yVel = yDir * PLAYER_SPEED;
  284.  
  285. player.x += xVel;
  286. player.y += yVel;
  287.  
  288. player.rotation += player.angularDirection * PLAYER_TURN_SPEED;
  289.  
  290. //if(player.isDead == false)
  291. //{
  292. // var hit = intersects(player.x, player.y,
  293. // player.width, player.height,
  294. // asteroid.x, asteroid.y,
  295. // asteroid.width, asteroid.height);
  296. // if(hit == true)
  297. // {
  298. // player.isDead = true;
  299. // asteroid.isDead = true;
  300. // }
  301. // if(player.isDead == true)
  302. // {
  303. // delete player.image;
  304. // }
  305. // if(asteroid.isDead == true)
  306. // {
  307. // delete asteroid.image;
  308. // }
  309. //}
  310.  
  311.  
  312.  
  313. ctx.save();
  314. ctx.translate(player.x, player.y);
  315. ctx.rotate(player.rotation);
  316. ctx.scale(0.75,0.75);
  317. if(player.isDead == false)
  318. {
  319. ctx.drawImage(player.image,-player.width/2,-player.height/2);
  320. }
  321. else
  322. {}
  323. ctx.restore();
  324.  
  325. //var velocityX = asteroid.directionX * ASTEROID_SPEED;
  326. //var velocityY = asteroid.directionY * ASTEROID_SPEED;
  327. //asteroid.x += velocityX;
  328. //asteroid.y += velocityY;
  329. //if(asteroid.isDead == false)
  330. //{
  331. //ctx.drawImage(asteroid.image, asteroid.x - asteroid.width/2, asteroid.y - asteroid.height/2);
  332. //}
  333. }
  334.  
  335.  
  336.  
  337. //-------------------- Don't modify anything below here
  338. // This code will set up the framework so that the 'run' function is
  339. // called 60 times per second. We have some options to fall back on
  340. // in case the browser doesn't support our preferred method.
  341. (function() {
  342. var onEachFrame;
  343. if (window.requestAnimationFrame) {
  344. onEachFrame = function(cb) {
  345. var _cb = function() { cb(); window.requestAnimationFrame(_cb); }
  346. _cb();
  347. };
  348. } else if (window.mozRequestAnimationFrame) {
  349. onEachFrame = function(cb) {
  350. var _cb = function() { cb();
  351. window.mozRequestAnimationFrame(_cb); }
  352. _cb();
  353. };
  354. } else {
  355. onEachFrame = function(cb) {
  356. setInterval(cb, 1000 / 60);
  357. }
  358. }
  359.  
  360. window.onEachFrame = onEachFrame;
  361. })();
  362. window.onEachFrame(run);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement