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

質問編集履歴

4

2018/11/23 00:19

投稿

nosonosolife
nosonosolife

スコア42

title CHANGED
File without changes
body CHANGED
@@ -1,4 +1,4 @@
1
- 先日運営しているサイトにJavaScript+Canvasで制作した「もぐらたたき」ゲームを公開し、各デバイスの動作を確認したところ、
1
+ 先日運営しているサイトにJavaScript+Canvasで制作したゲームを公開し、各デバイスの動作を確認したところ、
2
2
  PCブラウザ(Firefox)、iphoneのsafariでは上手く動いたのですが(iphoneでは一部BGMと効果音が鳴りませんがスルー)
3
3
  ipadのsafariでだけ、最初のタイトル画面は表示されますが、スタートボタンを押しても何も反応しません。
4
4
  どうやらページをスクロールするとタップイベントが効かなくなるようです。

3

ソースコードを追加

2018/11/23 00:19

投稿

nosonosolife
nosonosolife

スコア42

title CHANGED
File without changes
body CHANGED
@@ -3,4 +3,15 @@
3
3
  ipadのsafariでだけ、最初のタイトル画面は表示されますが、スタートボタンを押しても何も反応しません。
4
4
  どうやらページをスクロールするとタップイベントが効かなくなるようです。
5
5
  原因は何でしょうか。ご提示よろしくお願いいたします。
6
+
7
+ マウス位置の取得は以下のように行っております。
8
+ ```JavaScript
6
- ※コードを記載しようと思ったのですが、文字数制限に引っかかってしまいました。ご了承ください。
9
+ var rect = e.target.getBoundingClientRect();
10
+ if(window.TouchEvent){
11
+ var mouseX = e.changedTouches[0].pageX - rect.left;
12
+ var mouseY = e.changedTouches[0].pageY - rect.top;
13
+ }else{
14
+ var mouseX = e.clientX - rect.left;
15
+ var mouseY = e.clientY - rect.top;
16
+ }
17
+ ```

2

2018/11/23 00:10

投稿

nosonosolife
nosonosolife

スコア42

title CHANGED
@@ -1,1 +1,1 @@
1
- ipadだけJavaScript+Canvas制作したゲームかな
1
+ iOScanvasのタップイベントページスクロールすると効かなくなる
body CHANGED
@@ -1,5 +1,6 @@
1
1
  先日運営しているサイトにJavaScript+Canvasで制作した「もぐらたたき」ゲームを公開し、各デバイスの動作を確認したところ、
2
2
  PCブラウザ(Firefox)、iphoneのsafariでは上手く動いたのですが(iphoneでは一部BGMと効果音が鳴りませんがスルー)
3
3
  ipadのsafariでだけ、最初のタイトル画面は表示されますが、スタートボタンを押しても何も反応しません。
4
+ どうやらページをスクロールするとタップイベントが効かなくなるようです。
4
5
  原因は何でしょうか。ご提示よろしくお願いいたします。
5
6
  ※コードを記載しようと思ったのですが、文字数制限に引っかかってしまいました。ご了承ください。

1

一部変更

2018/11/23 00:06

投稿

nosonosolife
nosonosolife

スコア42

title CHANGED
File without changes
body CHANGED
@@ -2,242 +2,4 @@
2
2
  PCブラウザ(Firefox)、iphoneのsafariでは上手く動いたのですが(iphoneでは一部BGMと効果音が鳴りませんがスルー)
3
3
  ipadのsafariでだけ、最初のタイトル画面は表示されますが、スタートボタンを押しても何も反応しません。
4
4
  原因は何でしょうか。ご提示よろしくお願いいたします。
5
- 以下はゲームのコードです。
6
-
7
- ```javascript
8
- // 定数定義
9
- var FPS = 60;
10
- var SCREEN_WIDTH = 640;
11
- var SCREEN_HEIGHT = 490;
12
- var holepos = [
13
- {"posx":44,"posy":186},
14
- {"posx":44,"posy":267},
15
- {"posx":157,"posy":144},
16
- {"posx":157,"posy":226},
17
- {"posx":157,"posy":309},
18
- {"posx":277,"posy":103},
19
- {"posx":277,"posy":182},
20
- {"posx":277,"posy":261},
21
- {"posx":277,"posy":340},
22
- {"posx":398,"posy":144},
23
- {"posx":398,"posy":226},
24
- {"posx":398,"posy":309},
25
- {"posx":509,"posy":186},
26
- {"posx":509,"posy":267}
27
- ];
28
- //変数定義------------------------------------------------------------
29
- var gameFrame = 0;
30
- var startTime = 0;
31
- var delta = 0;
32
- var lastTimeStamp = 0;
33
- var limitTime = 0;
34
-
35
- var gameMode = null;
36
- var readyCount = 4;
37
- var holes = [];
38
- var score = 0;
39
- var hit = 0;
40
- var miss = 0;
41
-
42
- var startBtn;
43
- var howToBtn;
44
-
45
- var closeBtn;
46
-
47
- var scoreSendBtn;
48
- var tweetBtn;
49
- var retryBtn;
50
- var titleBtn;
51
-
52
- var image = new Array();
53
- var imageCount = 0;
54
- var imageSrc = [
55
- "img/titlebg.png",
56
- "img/buttons.png",
57
- "img/howtoplaybg.png",
58
- "img/gamemainbg.png",
59
- "img/readycountdownbg.png",
60
- "img/statusnum.png",
61
- "img/chara.png",
62
- "img/pestle.png",
63
- "img/scorenum.png",
64
- "img/timeupbg.png",
65
- "img/gameresultbg.png",
66
- ];
67
- var audios = {
68
- "titlebgm": new Audio("sound/titlebgm.mp3"),
69
- "mainbgm": new Audio("sound/mainbgm.mp3"),
70
- "btnclick": new Audio("sound/btnclick.mp3"),
71
- "countdown": new Audio("sound/countdown.mp3"),
72
- "startgong": new Audio("sound/startgong.mp3"),
73
- "endgong": new Audio("sound/endgong.mp3"),
74
- "fetch": new Audio("sound/fetch.mp3"),
75
- "hit": new Audio("sound/hit.mp3"),
76
- "miss": new Audio("sound/miss.mp3"),
77
- "fall": new Audio("sound/fall.mp3"),
78
- "timeup": new Audio("sound/timeup.mp3"),
79
- "resultdisp": new Audio("sound/resultdisp.mp3"),
80
- "resultbgm": new Audio("sound/resultbgm.mp3")
81
- };
82
-
83
- var canvas = document.getElementById('main');
84
- canvas.width = SCREEN_WIDTH;
85
- canvas.height = SCREEN_HEIGHT;
86
- var ctx = canvas.getContext('2d');
87
- requestAnimationFrame = (function() {
88
- return window.requestAnimationFrame || window.webkitRequestAnimationFrame ||
89
- window.mozRequestAnimationFrame || window.oRequestAnimationFrame ||
90
- window.msRequestAnimationFrame || function(callback) {
91
- window.setTimeout(callback, 1000 / FPS);
92
- };
93
- })();
94
-
95
- var click_touch = window.ontouchstart===null?"touchstart":"click";
96
-
97
- function gameLoading() {
98
- gameLoadingDraw();
99
- for(var i in imageSrc){
100
- image[i] = new Image();
101
- image[i].src = imageSrc[i];
102
- image[i].onload = function() {
103
- imageCount++;
104
- // 全ての画像が読み終えたらイベントを発動
105
- if(imageCount == imageSrc.length){
106
- gameMode = "TITLE";
107
- mainLoop();
108
- }
109
- }
110
- }
111
- for(var i in audios){
112
- audios[i].load();
113
- }
114
- }
115
-
116
- function gameLoadingDraw() {
117
- // 表示
118
- var img = new Image();
119
- img.src = "img/nowloading.png";
5
+ ※コードを記載しようと思ったのですが、文字数制限に引っかかってしまいました。ご了承ください。
120
- var bgWidth = 404;
121
- var bgHeight = 47;
122
- var bgX = Math.floor(canvas.width - bgWidth) / 2;
123
- var bgY = Math.floor(canvas.height - bgHeight) / 2;
124
- /* 画像を描画 */
125
- ctx.drawImage(img, 0, 0, bgWidth, bgHeight, bgX, bgY, bgWidth, bgHeight);
126
- }
127
-
128
- function mainLoop() { //メインループ処理
129
- var t = new Date().getTime();
130
- if (lastTimeStamp > 0) {
131
- delta = (t - lastTimeStamp) / 1000;
132
- }
133
- lastTimeStamp = t;
134
- gameFrame++;
135
-
136
- switch (gameMode) {
137
- case "TITLE":
138
- gameTitle();
139
- break;
140
- case "HOW_TO_PLAY":
141
- howToPlay();
142
- break;
143
- case "READY":
144
- break;
145
- case "MAIN":
146
- gameMain();
147
- break;
148
- case "END":
149
- break;
150
- }
151
- requestAnimationFrame(function() {
152
- mainLoop();
153
- });
154
- }
155
-
156
- function gameTitle() {
157
- ctx.drawImage(image[0], 0, 0);
158
- startBtn = new Button(0, 0, 200, 323, 80, 37, 0);
159
- howToBtn = new Button(80, 0, 300, 323, 140, 37, 0);
160
- audios["titlebgm"].play();
161
- audios["titlebgm"].addEventListener("ended", function() {
162
- audios["titlebgm"].currentTime = 0;
163
- audios["titlebgm"].play();
164
- }, false);
165
- }
166
-
167
- function howToPlay() {
168
- var bgWidth = 600;
169
- var bgHeight = 450;
170
- var bgX = Math.round(canvas.width - bgWidth) / 2;
171
- var bgY = Math.round(canvas.height - bgHeight) / 2;
172
- ctx.drawImage(image[2], bgX, bgY, bgWidth, bgHeight);
173
- closeBtn = new Button(220, 37, bgX+260, bgY+388, 80, 37, 0);
174
- }
175
-
176
- function gameReady() {
177
- gameMode = "READY";
178
- // 表示
179
- var bgWidth = 385;
180
- var bgHeight = 106;
181
- var bgX = Math.round(canvas.width - bgWidth) / 2;
182
- var bgY = Math.round(canvas.height - bgHeight) / 2;
183
- /* 画像を描画 */
184
- readyCount--;
185
- if(readyCount < 0){
186
- gameStart();
187
- audios["startgong"].play();
188
- }else {
189
- bgDraw();
190
- ctx.drawImage(image[4], 0, bgHeight*readyCount, bgWidth, bgHeight, bgX, bgY, bgWidth, bgHeight);
191
- setTimeout(gameReady, 1000);
192
- audios["countdown"].play();
193
- }
194
- }
195
-
196
- function gameStart() {
197
- holes = [];
198
- score = 0;
199
- hit = 0;
200
- miss = 0;
201
- startTime = new Date().getTime()/1000;
202
- for (var i in holepos) {
203
- holes.push(new Hole(i));
204
- if(holes[i].mode == 4){
205
- holes[i].mode = 2;
206
- holes[i].nextMode = 0;
207
- holes[i].waitFor = gameFrame + Math.floor(Math.random() * 200);
208
- }
209
- }
210
- gameMode = "MAIN";
211
- readyCount = 4;
212
- audios["mainbgm"].play();
213
- }
214
-
215
- function gameMain() {
216
- bgDraw();
217
- numDraw(213,22,score);
218
- numDraw(134,62,hit);
219
- numDraw(134,102,miss);
220
- timeLimit();
221
- for (var i in holes) {
222
- holeDraw(i);
223
- holeMove(i);
224
- if(limitTime == 3){
225
- audios["countdown"].play();
226
- }
227
- if(limitTime == 0){
228
- audios["endgong"].play();
229
- audios["mainbgm"].pause();
230
- audios["mainbgm"].currentTime = 0;
231
- }
232
- if(limitTime <= 0){
233
- if(holes[i].mode != 3){
234
- holes[i].mode = 1;
235
- holes[i].nextMode = 4;
236
- gameEnd();
237
- }
238
- }
239
- }
240
- canvas.addEventListener("mousemove", holeMouseOver, false);
241
- canvas.addEventListener(click_touch, holeHit, false);
242
- }
243
- ```