teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

ご指摘ありがとうございます。先頭のjavascriptを一行下げて貼りなおしました。

2020/10/21 18:53

投稿

aoi68
aoi68

スコア9

title CHANGED
File without changes
body CHANGED
@@ -2,7 +2,8 @@
2
2
 
3
3
  **ソースコードを貼りなおしました。**
4
4
 
5
+ ```
5
- ```javascript
6
+ javascript
6
7
 
7
8
  <!DOCTYPE html>
8
9
  <html lang="en">
@@ -136,4 +137,5 @@
136
137
  </script>
137
138
  </body>
138
139
 
139
- </html>```
140
+ </html>
141
+ ```

1

ソースコードの全体を貼りました。

2020/10/21 18:53

投稿

aoi68
aoi68

スコア9

title CHANGED
File without changes
body CHANGED
@@ -1,7 +1,90 @@
1
- シンプルなブロック崩しを動画を参考にしながら模写しているのですが、function drawで表示されるはずのボールやブロックが表示されません。ディベロッパーツールを見たところ、42行に不具合があると出いるのですが、このfor文は間違っていないはずなので、原因がさっぱりわかりません。ご教授お願いします。↓こちらがfunction drawの全てです。
1
+ シンプルなブロック崩しを動画を参考にしながら模写しているのですが、function drawで表示されるはずのボールやブロックが表示されません。ディベロッパーツールを見て原因がさっぱりわかりませんでした。ご教授お願いします。
2
2
 
3
+ **ソースコードを貼りなおしました。**
4
+
3
5
  ```javascript
6
+
7
+ <!DOCTYPE html>
8
+ <html lang="en">
9
+
10
+ <head>
11
+ <meta charset="UTF-8">
12
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
13
+ <title>ブロック崩し</title>
14
+ </head>
15
+
16
+ <body>
17
+ <canvas id="myCanvas" width="480" height="320"></canvas>
18
+ <script>
19
+ var canvas = document.getElementById("myCanvas");
20
+ var ctx = canvas.getContext("2d");
21
+
22
+ var x = canvas.width / 2;
23
+ var y = canvas.height - 30;
24
+
25
+ var dx = 2;
26
+ var dy = -2;
27
+
28
+ var ballRadius = 10;
29
+
30
+ var paddleHeight = 10;
31
+ var paddleWidth = 75;
32
+ var paddleX = (canvas.width - paddleWidth) / 2;
33
+
34
+ var rightPressed = false;
35
+ var leftPressed = false;
36
+
37
+ var brickRowCount = 3;
38
+ var brickColumnCount = 5;
39
+ var brickWidth = 75;
40
+ var brickHeight = 20;
41
+ var brickPadding = 10;
42
+ var brickOffsetTop = 30;
43
+ var brickOffsetLeft = 30;
44
+
45
+ var bricks = [];
46
+
47
+ for (var c = 0; c < brickColumnCount; c++) {
48
+ brick[c] = [];
49
+ for (var r = 0; r < brickRowCount; r++) {
50
+ brick[c][r] = { x: 0, y: 0 };
51
+ }
52
+ }
53
+
54
+ function drawBall() {
55
+ ctx.beginPath();
56
+ ctx.act(x, y, ballRadius, 0, Math.PI * 2);
57
+ ctx.fillStyle = "#0095DD";
58
+ ctx.fill();
59
+ ctx.closePath();
60
+ }
61
+
62
+ function drawPaddle() {
63
+ ctx.beginPath();
64
+ ctx.rect(paddleX, canvas.height - paddleHeight, paddleWidth, paddleHeight);
65
+ ctx.fillStyle = "#0095DD";
66
+ ctx.fill();
67
+ ctx.closePath();
68
+ }
69
+
70
+ function drawBricks() {
71
+ for (var c = 0; c < brickColumnCount; c++) {
72
+ for (var r = 0; r < brickRowCount; r++) {
73
+ var brickX = (c * (brickWidth + brickPadding)) + brickOffsetLeft;
74
+ var brickY = (r * (brickHeight + brickPadding)) + brickOffsetTop;
75
+ bricks[c][r].x = 0;
76
+ bricks[c][r].y = 0;
77
+
78
+ ctx.beginPath();
79
+ ctx.rect(brickX, brickY, brickWidth, brickHeight);
80
+ ctx.fillStyle = "#0095DD";
81
+ ctx.fill();
82
+ ctx.closePath();
83
+ }
84
+ }
85
+ }
86
+
4
- function draw() {
87
+ function draw() {
5
88
  ctx.clearRect(0, 0, canvas.width, canvas.height);
6
89
  drawBall();
7
90
  drawBricks();
@@ -30,11 +113,27 @@
30
113
 
31
114
  }
32
115
 
116
+ document.addEventListener("keydown", keyDownHandler, false);
117
+ document.addEventListener("keyup", keyUpHandler, false);
118
+
33
- ```↓こちらが42行が含まれているfor文です。
119
+ function keyDownHandler(e) {
34
- ```javascript
35
- for (var c = 0; c < brickColumnCount; c++) {
120
+ if (e.key == "Right" || e.key == "ArrowRight") {
36
- brick[c] = [];
121
+ rightPressed = true;
37
- for (var r = 0; r < brickRowCount; r++) {
122
+ } else if (e.key == "Left" || e.key == "ArrowLeft") {
38
- brick[c][r] = { x: 0, y: 0 };
123
+ leftPressed = true;
39
124
  }
40
- }```
125
+ }
126
+
127
+ function keyUpHandler(e) {
128
+ if (e.key == "Right" || e.key == "ArrowRight") {
129
+ rightPressed = false;
130
+ } else if (e.key == "Left" || e.key == "ArrowLeft") {
131
+ leftPressed = false;
132
+ }
133
+ }
134
+
135
+ var interval = setInterval(draw, 10);
136
+ </script>
137
+ </body>
138
+
139
+ </html>```