質問編集履歴

1

このコードを書くに至った元のコード、きっかけとなったホームページを記載しました。

2020/04/09 07:52

投稿

shiota-genpachi
shiota-genpachi

スコア5

test CHANGED
@@ -1 +1 @@
1
- canvas上で、image要素をチカチカさせることなく動かしたい
1
+ canvas上で、image要素を動かしたい
test CHANGED
@@ -1,12 +1,24 @@
1
- ### canvas上で、image要素をチカチカさせることなく動かしたい
1
+ ### canvas上で、image要素く動かしたい
2
2
 
3
3
 
4
4
 
5
5
  canvas上で、image要素が画面の端から端へとループする動きを作成しようとしています。
6
6
 
7
+ しかし、画像が表示されません。
8
+
7
- 当初、setTimeoutを使うことで、その挙動を確認できたのですが、image要素がチカチカしてしまいました。それを解決するために、色々と情報を探していたところ、requestAnimFrameに行き着き、使用してみたのですが、エラーメッセージ出ていないのに、image要素が表示されなくなりました(request~を消してみと、動きのない状態、image要素は出した)
9
+ エラーコードメッセージ出ているわけもありせん。
8
-
10
+
11
+
12
+
9
- のコードの形引き継いで、ボールを描いてみころ、それはまくいくのですが...
13
+ 二つ目のコードを元に、ボールの部分image要素にしてみよう発想です
14
+
15
+
16
+
17
+ ちなみに、
18
+
19
+ https://www.cow-aka.jp/akabakojoshi/
20
+
21
+ の背景で、様々な画像が端から端へとループしているのをみて、canvasを触り始めた次第です。
10
22
 
11
23
 
12
24
 
@@ -134,6 +146,130 @@
134
146
 
135
147
 
136
148
 
149
+ ボールの動き↓このボールをimage画像にしたいです
150
+
151
+
152
+
153
+
154
+
155
+ ```javascript
156
+
157
+ const canvas = document.getElementById('canvas');
158
+
159
+
160
+
161
+ function onResize() {
162
+
163
+ canvas.width = innerWidth * devicePixelRatio;
164
+
165
+ canvas.height = 1200;
166
+
167
+ }
168
+
169
+ window.addEventListener('resize', onResize);
170
+
171
+ onResize();
172
+
173
+
174
+
175
+ var ctx = canvas.getContext('2d');
176
+
177
+
178
+
179
+ var Ball = function(x , y , vx) {
180
+
181
+ this.x = x;
182
+
183
+ this.y = y;
184
+
185
+ this.vx = vx;
186
+
187
+ this.draw = function() {
188
+
189
+ ctx.beginPath();
190
+
191
+ ctx.fillStyle = '#FF0088';
192
+
193
+ ctx.arc(this.x, this.y, 30, 0, 2*Math.PI, true);
194
+
195
+ ctx.fill();
196
+
197
+ };
198
+
199
+ this.move = function() {
200
+
201
+ this.x += this.vx;
202
+
203
+ if (this.x > canvas.width + 200 ) {
204
+
205
+ this.x = x;
206
+
207
+ }
208
+
209
+ };
210
+
211
+ }
212
+
213
+
214
+
215
+ var myBall = new Ball(-100, 100, 5);
216
+
217
+
218
+
219
+ function clearStage() {
220
+
221
+ ctx.fillStyle = '#AAEDFF';
222
+
223
+ ctx.fillRect(0, 0, canvas.width, canvas.height);
224
+
225
+ }
226
+
227
+
228
+
229
+ function update() {
230
+
231
+ requestAnimFrame(update);
232
+
233
+ clearStage();
234
+
235
+ myBall.draw();
236
+
237
+ myBall.move();
238
+
239
+ }
240
+
241
+
242
+
243
+ window.requestAnimFrame = (function(){
244
+
245
+ return window.requestAnimationFrame ||
246
+
247
+ window.webkitRequestAnimationFrame ||
248
+
249
+ window.mozRequestAnimationFrame ||
250
+
251
+ window.oRequestAnimationFrame ||
252
+
253
+ window.msRequestAnimationFrame ||
254
+
255
+ function(callback){
256
+
257
+ window.setTimeout(callback, 1000 / 60);
258
+
259
+ };
260
+
261
+ })();
262
+
263
+
264
+
265
+ update();
266
+
267
+
268
+
269
+ ```
270
+
271
+
272
+
137
273
 
138
274
 
139
275
  ### 発生している問題・エラーメッセージ