Advertisement
Guest User

Untitled

a guest
Aug 21st, 2019
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.30 KB | None | 0 0
  1. (function () {
  2. //全体で使用する変数
  3. //矢印キーのコード
  4. let KEY_CODE = {
  5. left: 37, right: 39
  6. };
  7. //取得したキーの値
  8. let key_value = 0;
  9. //タッチ開始時の位置
  10. let touchStartPos = 0;
  11.  
  12. let canvas;
  13. let ctx;
  14. let img = { snow: null, snow_man: null };
  15. let requestId;
  16.  
  17. //DOM のロードが完了したら実行
  18. document.addEventListener('DOMContentLoaded', () => {
  19. loadAssets();
  20. setHandlers();
  21. });
  22.  
  23. //Sprite クラスの定義
  24. class Sprite {
  25. constructor(img) {
  26. this.image = img; //image オブジェクト
  27. this.height = img.height;
  28. this.width = img.width;
  29. this.x = 0; //表示位置 x
  30. this.y = 0; //表示位置 y
  31. this.dx = 0; //移動量 x
  32. this.dy = 0; //移動量 y
  33. this._imageIndex = 0;
  34. this._offset_x_pos = 0;
  35. /*ここに演習 7 のタスク 2 でオーディオ再生用の
  36. プロパティを追加します*/
  37. //Sprite を描画するメソッド
  38. this.draw = () => {
  39. ctx.drawImage(img, this.x, this.y);
  40. };
  41. }
  42. /*ここに演習 7 のタスク 1 で Getter と Setter の
  43. コードを追加します*/
  44. }
  45.  
  46. //Sprite を扱う変数オブジェクト
  47. let sprite = {
  48. //雪の結晶 Sprite が格納
  49. snow: null,
  50. //雪だるまの Sprite が格納
  51. snow_man: null
  52. };
  53.  
  54. /*ここに演習 6 タスク 1 で SNOWS_MOVING_CON オブジェクト変数を定義します。*/
  55. /*ここに演習 8 で Rule クラスを定義します*/
  56. //ゲームに必要なアセットをロードする
  57. function loadAssets() {
  58. /*ここに演習 8 で Rule クラスのインスタンスを生成するコードを記述します*/
  59. //HTML ファイル上の canvas エレメントのインスタンスを取得
  60. canvas = document.getElementById('bg');
  61. //アニメーションの開始
  62. canvas.addEventListener('click', () => {
  63. /*演習 6 のタスク 3 で loadCheck 関数を呼び出すように変更されます*/
  64. if (!requestId) { renderFrame(); }
  65. });
  66. //2D コンテキストを取得
  67. ctx = canvas.getContext('2d');
  68. //image オブジェクトのインスタンスを生成
  69. img.snow = new Image();
  70. //image オブジェクトに画像をロード
  71. img.snow.src = './img/snow.png';
  72. /*画像読み込み完了の Canvas に
  73. 画像を表示するメソッドを記述 */
  74. img.snow.onload = () => {
  75. /*このハンドラの処理は演習 6 のタスク 1 手順 3 で書き換えます*/
  76. /*ここは演習 7 のタスク 1 手順 3 で変更されます*/
  77. //画像を引数に Sprite クラスのインスタンスを生成
  78. sprite.snow = new Sprite(img.snow);
  79. sprite.snow.x = getCenterPostion(canvas.clientWidth, sprite.snow.width);
  80. sprite.snow.y = 0;
  81. //Sprite オブジェクトに定義した draw メソッドで描画
  82. sprite.snow.draw();
  83. };
  84. //雪だるまインスタンスの生成
  85. img.snow_man = new Image();
  86. img.snow_man.src = './img/snow_man.png';
  87. img.snow_man.onload = () => {
  88. /*このハンドラの処理は演習 6 のタスク 1 手順 3 で書き換えます*/
  89. sprite.snow_man = new Sprite(img.snow_man);
  90. sprite.snow_man.x = getCenterPostion(canvas.clientWidth, sprite.snow_man.width);
  91. //雪だるま画像は、表示領域の底辺に画像の底辺がつくように
  92. sprite.snow_man.y = canvas.clientHeight - sprite.snow_man.height;
  93. //右側に動かせる最大値を設定
  94. sprite.snow_man.limit_rightPosition = getRightLimitPosition(
  95. canvas.clientWidth, sprite.snow_man.width);
  96. sprite.snow_man.draw();
  97. };
  98. };
  99.  
  100. function setHandlers() {
  101. //キーイベントの取得 (キーダウン)
  102. document.addEventListener('keydown', (evnt) => {
  103. if (evnt.which == KEY_CODE.left) {
  104. key_value = -3;
  105. } else if (evnt.which == KEY_CODE.right) {
  106. key_value = 3;
  107. }
  108. });
  109. //雪だるまが進みっぱなしにならないように、 キーが上がったら 0 に
  110. document.addEventListener('keyup', () => {
  111. key_value = 0;
  112. });
  113. /* ここに演習 4 のタスク 2 でタッチイベントのハンドラを記述*/
  114. };
  115.  
  116.  
  117. //中央の Left 位置を求める関数
  118. function getCenterPostion(containerWidth, itemWidth) {
  119. return (containerWidth / 2) - (itemWidth / 2);
  120. };
  121.  
  122. function renderFrame() {
  123. //sprite.snow の y 値(縦位置) が canvas からはみ出たら先頭に戻す
  124. if (sprite.snow.y > canvas.clientHeight) { sprite.snow.y = 0 };
  125. //canvas をクリア
  126. ctx.clearRect(0, 0, canvas.width, canvas.height);
  127. //sprite.snow の y 値を増分
  128. sprite.snow.y += 2;
  129. // sprite.snow_man の x 値が動作範囲内かどうか
  130. if ((sprite.snow_man.x < sprite.snow_man.limit_rightPosition && key_value > 0)
  131. || (sprite.snow_man.x >= 3 && key_value < 0)) {
  132. //sprite.snow_man の x 値を増分
  133. sprite.snow_man.x += key_value;
  134. }
  135. //Spriteを描画
  136. sprite.snow.draw();
  137. sprite.snow_man.draw();
  138. /*ここに演習 5 isHit関数を呼び出すコードを追加します*/
  139. /*ここに演習 7 のタスク 1 手順 7 で処理数のカウントを追加します*/
  140. //ループを開始
  141. requestId = window.requestAnimationFrame(renderFrame);
  142. }
  143.  
  144. //雪だるまを動かせる右の限界位置を算出する
  145. function getRightLimitPosition(containerWidth, itemWidth) {
  146. return containerWidth - itemWidth;
  147. }
  148.  
  149. /*ここに演習 5 で isHit 関数を記述します。*/
  150. /*ここに演習 5 で hitJob 関数を記述します。*/
  151. /*ここに演習 6 タスク 2 で getRandomPosition 関数を記述します。*/
  152. /*ここに演習 6 タスク 3 で loadCheck 関数を記述します。*/
  153. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement