質問編集履歴

4

2018/11/23 00:19

投稿

nosonosolife
nosonosolife

スコア42

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,4 @@
1
- 先日運営しているサイトにJavaScript+Canvasで制作した「もぐらたたき」ゲームを公開し、各デバイスの動作を確認したところ、
1
+ 先日運営しているサイトにJavaScript+Canvasで制作したゲームを公開し、各デバイスの動作を確認したところ、
2
2
 
3
3
  PCブラウザ(Firefox)、iphoneのsafariでは上手く動いたのですが(iphoneでは一部BGMと効果音が鳴りませんがスルー)
4
4
 

3

ソースコードを追加

2018/11/23 00:19

投稿

nosonosolife
nosonosolife

スコア42

test CHANGED
File without changes
test CHANGED
@@ -8,4 +8,26 @@
8
8
 
9
9
  原因は何でしょうか。ご提示よろしくお願いいたします。
10
10
 
11
+
12
+
13
+ マウス位置の取得は以下のように行っております。
14
+
15
+ ```JavaScript
16
+
11
- ※コードを記載しようと思ったのですが、文字数制限に引っかかってしまいました。ご了承ください。
17
+ var rect = e.target.getBoundingClientRect();
18
+
19
+ if(window.TouchEvent){
20
+
21
+ var mouseX = e.changedTouches[0].pageX - rect.left;
22
+
23
+ var mouseY = e.changedTouches[0].pageY - rect.top;
24
+
25
+ }else{
26
+
27
+ var mouseX = e.clientX - rect.left;
28
+
29
+ var mouseY = e.clientY - rect.top;
30
+
31
+ }
32
+
33
+ ```

2

2018/11/23 00:10

投稿

nosonosolife
nosonosolife

スコア42

test CHANGED
@@ -1 +1 @@
1
- ipadだけJavaScript+Canvasで制作したゲムが動かな
1
+ iOScanvasのタップイベントがペジスクロールすると効かなくなる
test CHANGED
@@ -4,6 +4,8 @@
4
4
 
5
5
  ipadのsafariでだけ、最初のタイトル画面は表示されますが、スタートボタンを押しても何も反応しません。
6
6
 
7
+ どうやらページをスクロールするとタップイベントが効かなくなるようです。
8
+
7
9
  原因は何でしょうか。ご提示よろしくお願いいたします。
8
10
 
9
11
  ※コードを記載しようと思ったのですが、文字数制限に引っかかってしまいました。ご了承ください。

1

一部変更

2018/11/23 00:06

投稿

nosonosolife
nosonosolife

スコア42

test CHANGED
File without changes
test CHANGED
@@ -6,480 +6,4 @@
6
6
 
7
7
  原因は何でしょうか。ご提示よろしくお願いいたします。
8
8
 
9
- 以下はゲームのコードです。
10
-
11
-
12
-
13
- ```javascript
14
-
15
- // 定数定義
16
-
17
- var FPS = 60;
18
-
19
- var SCREEN_WIDTH = 640;
20
-
21
- var SCREEN_HEIGHT = 490;
22
-
23
- var holepos = [
24
-
25
- {"posx":44,"posy":186},
26
-
27
- {"posx":44,"posy":267},
28
-
29
- {"posx":157,"posy":144},
30
-
31
- {"posx":157,"posy":226},
32
-
33
- {"posx":157,"posy":309},
34
-
35
- {"posx":277,"posy":103},
36
-
37
- {"posx":277,"posy":182},
38
-
39
- {"posx":277,"posy":261},
40
-
41
- {"posx":277,"posy":340},
42
-
43
- {"posx":398,"posy":144},
44
-
45
- {"posx":398,"posy":226},
46
-
47
- {"posx":398,"posy":309},
48
-
49
- {"posx":509,"posy":186},
50
-
51
- {"posx":509,"posy":267}
52
-
53
- ];
54
-
55
- //変数定義------------------------------------------------------------
56
-
57
- var gameFrame = 0;
58
-
59
- var startTime = 0;
60
-
61
- var delta = 0;
62
-
63
- var lastTimeStamp = 0;
64
-
65
- var limitTime = 0;
66
-
67
-
68
-
69
- var gameMode = null;
70
-
71
- var readyCount = 4;
72
-
73
- var holes = [];
74
-
75
- var score = 0;
76
-
77
- var hit = 0;
78
-
79
- var miss = 0;
80
-
81
-
82
-
83
- var startBtn;
84
-
85
- var howToBtn;
86
-
87
-
88
-
89
- var closeBtn;
90
-
91
-
92
-
93
- var scoreSendBtn;
94
-
95
- var tweetBtn;
96
-
97
- var retryBtn;
98
-
99
- var titleBtn;
100
-
101
-
102
-
103
- var image = new Array();
104
-
105
- var imageCount = 0;
106
-
107
- var imageSrc = [
108
-
109
- "img/titlebg.png",
110
-
111
- "img/buttons.png",
112
-
113
- "img/howtoplaybg.png",
114
-
115
- "img/gamemainbg.png",
116
-
117
- "img/readycountdownbg.png",
118
-
119
- "img/statusnum.png",
120
-
121
- "img/chara.png",
122
-
123
- "img/pestle.png",
124
-
125
- "img/scorenum.png",
126
-
127
- "img/timeupbg.png",
128
-
129
- "img/gameresultbg.png",
130
-
131
- ];
132
-
133
- var audios = {
134
-
135
- "titlebgm": new Audio("sound/titlebgm.mp3"),
136
-
137
- "mainbgm": new Audio("sound/mainbgm.mp3"),
138
-
139
- "btnclick": new Audio("sound/btnclick.mp3"),
140
-
141
- "countdown": new Audio("sound/countdown.mp3"),
142
-
143
- "startgong": new Audio("sound/startgong.mp3"),
144
-
145
- "endgong": new Audio("sound/endgong.mp3"),
146
-
147
- "fetch": new Audio("sound/fetch.mp3"),
148
-
149
- "hit": new Audio("sound/hit.mp3"),
150
-
151
- "miss": new Audio("sound/miss.mp3"),
152
-
153
- "fall": new Audio("sound/fall.mp3"),
154
-
155
- "timeup": new Audio("sound/timeup.mp3"),
156
-
157
- "resultdisp": new Audio("sound/resultdisp.mp3"),
158
-
159
- "resultbgm": new Audio("sound/resultbgm.mp3")
160
-
161
- };
162
-
163
-
164
-
165
- var canvas = document.getElementById('main');
166
-
167
- canvas.width = SCREEN_WIDTH;
168
-
169
- canvas.height = SCREEN_HEIGHT;
170
-
171
- var ctx = canvas.getContext('2d');
172
-
173
- requestAnimationFrame = (function() {
174
-
175
- return window.requestAnimationFrame || window.webkitRequestAnimationFrame ||
176
-
177
- window.mozRequestAnimationFrame || window.oRequestAnimationFrame ||
178
-
179
- window.msRequestAnimationFrame || function(callback) {
180
-
181
- window.setTimeout(callback, 1000 / FPS);
182
-
183
- };
184
-
185
- })();
186
-
187
-
188
-
189
- var click_touch = window.ontouchstart===null?"touchstart":"click";
190
-
191
-
192
-
193
- function gameLoading() {
194
-
195
- gameLoadingDraw();
196
-
197
- for(var i in imageSrc){
198
-
199
- image[i] = new Image();
200
-
201
- image[i].src = imageSrc[i];
202
-
203
- image[i].onload = function() {
204
-
205
- imageCount++;
206
-
207
- // 全ての画像が読み終えたらイベントを発動
208
-
209
- if(imageCount == imageSrc.length){
210
-
211
- gameMode = "TITLE";
212
-
213
- mainLoop();
214
-
215
- }
216
-
217
- }
218
-
219
- }
220
-
221
- for(var i in audios){
222
-
223
- audios[i].load();
224
-
225
- }
226
-
227
- }
228
-
229
-
230
-
231
- function gameLoadingDraw() {
232
-
233
- // 表示
234
-
235
- var img = new Image();
236
-
237
- img.src = "img/nowloading.png";
9
+ ※コードを記載しようと思ったのですが、文字数制限に引っかかってしまいました。ご了承ください。
238
-
239
- var bgWidth = 404;
240
-
241
- var bgHeight = 47;
242
-
243
- var bgX = Math.floor(canvas.width - bgWidth) / 2;
244
-
245
- var bgY = Math.floor(canvas.height - bgHeight) / 2;
246
-
247
- /* 画像を描画 */
248
-
249
- ctx.drawImage(img, 0, 0, bgWidth, bgHeight, bgX, bgY, bgWidth, bgHeight);
250
-
251
- }
252
-
253
-
254
-
255
- function mainLoop() { //メインループ処理
256
-
257
- var t = new Date().getTime();
258
-
259
- if (lastTimeStamp > 0) {
260
-
261
- delta = (t - lastTimeStamp) / 1000;
262
-
263
- }
264
-
265
- lastTimeStamp = t;
266
-
267
- gameFrame++;
268
-
269
-
270
-
271
- switch (gameMode) {
272
-
273
- case "TITLE":
274
-
275
- gameTitle();
276
-
277
- break;
278
-
279
- case "HOW_TO_PLAY":
280
-
281
- howToPlay();
282
-
283
- break;
284
-
285
- case "READY":
286
-
287
- break;
288
-
289
- case "MAIN":
290
-
291
- gameMain();
292
-
293
- break;
294
-
295
- case "END":
296
-
297
- break;
298
-
299
- }
300
-
301
- requestAnimationFrame(function() {
302
-
303
- mainLoop();
304
-
305
- });
306
-
307
- }
308
-
309
-
310
-
311
- function gameTitle() {
312
-
313
- ctx.drawImage(image[0], 0, 0);
314
-
315
- startBtn = new Button(0, 0, 200, 323, 80, 37, 0);
316
-
317
- howToBtn = new Button(80, 0, 300, 323, 140, 37, 0);
318
-
319
- audios["titlebgm"].play();
320
-
321
- audios["titlebgm"].addEventListener("ended", function() {
322
-
323
- audios["titlebgm"].currentTime = 0;
324
-
325
- audios["titlebgm"].play();
326
-
327
- }, false);
328
-
329
- }
330
-
331
-
332
-
333
- function howToPlay() {
334
-
335
- var bgWidth = 600;
336
-
337
- var bgHeight = 450;
338
-
339
- var bgX = Math.round(canvas.width - bgWidth) / 2;
340
-
341
- var bgY = Math.round(canvas.height - bgHeight) / 2;
342
-
343
- ctx.drawImage(image[2], bgX, bgY, bgWidth, bgHeight);
344
-
345
- closeBtn = new Button(220, 37, bgX+260, bgY+388, 80, 37, 0);
346
-
347
- }
348
-
349
-
350
-
351
- function gameReady() {
352
-
353
- gameMode = "READY";
354
-
355
- // 表示
356
-
357
- var bgWidth = 385;
358
-
359
- var bgHeight = 106;
360
-
361
- var bgX = Math.round(canvas.width - bgWidth) / 2;
362
-
363
- var bgY = Math.round(canvas.height - bgHeight) / 2;
364
-
365
- /* 画像を描画 */
366
-
367
- readyCount--;
368
-
369
- if(readyCount < 0){
370
-
371
- gameStart();
372
-
373
- audios["startgong"].play();
374
-
375
- }else {
376
-
377
- bgDraw();
378
-
379
- ctx.drawImage(image[4], 0, bgHeight*readyCount, bgWidth, bgHeight, bgX, bgY, bgWidth, bgHeight);
380
-
381
- setTimeout(gameReady, 1000);
382
-
383
- audios["countdown"].play();
384
-
385
- }
386
-
387
- }
388
-
389
-
390
-
391
- function gameStart() {
392
-
393
- holes = [];
394
-
395
- score = 0;
396
-
397
- hit = 0;
398
-
399
- miss = 0;
400
-
401
- startTime = new Date().getTime()/1000;
402
-
403
- for (var i in holepos) {
404
-
405
- holes.push(new Hole(i));
406
-
407
- if(holes[i].mode == 4){
408
-
409
- holes[i].mode = 2;
410
-
411
- holes[i].nextMode = 0;
412
-
413
- holes[i].waitFor = gameFrame + Math.floor(Math.random() * 200);
414
-
415
- }
416
-
417
- }
418
-
419
- gameMode = "MAIN";
420
-
421
- readyCount = 4;
422
-
423
- audios["mainbgm"].play();
424
-
425
- }
426
-
427
-
428
-
429
- function gameMain() {
430
-
431
- bgDraw();
432
-
433
- numDraw(213,22,score);
434
-
435
- numDraw(134,62,hit);
436
-
437
- numDraw(134,102,miss);
438
-
439
- timeLimit();
440
-
441
- for (var i in holes) {
442
-
443
- holeDraw(i);
444
-
445
- holeMove(i);
446
-
447
- if(limitTime == 3){
448
-
449
- audios["countdown"].play();
450
-
451
- }
452
-
453
- if(limitTime == 0){
454
-
455
- audios["endgong"].play();
456
-
457
- audios["mainbgm"].pause();
458
-
459
- audios["mainbgm"].currentTime = 0;
460
-
461
- }
462
-
463
- if(limitTime <= 0){
464
-
465
- if(holes[i].mode != 3){
466
-
467
- holes[i].mode = 1;
468
-
469
- holes[i].nextMode = 4;
470
-
471
- gameEnd();
472
-
473
- }
474
-
475
- }
476
-
477
- }
478
-
479
- canvas.addEventListener("mousemove", holeMouseOver, false);
480
-
481
- canvas.addEventListener(click_touch, holeHit, false);
482
-
483
- }
484
-
485
- ```