質問編集履歴

5

コードの編集

2019/10/13 12:09

投稿

tsuneet
tsuneet

スコア16

test CHANGED
File without changes
test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  spritekitを使って2つの物体の衝突判定をしたいのですが、うまく認識されません。
4
4
 
5
- 下記のコードの中頃にfunc createEnemy()の関数を作って2つのノード「ピペットノード(sprite1)」と「ビーカーノード(sprite2)」を用意しています。それぞれ実機のシミュレーションで物体の表示は出来て、ピペットノードが落下してビーカーノードにぶつかって無事に衝突するまではうまくいくのですが、衝突したときに起動するはずのdidBeginがうまく作動してくれません。(didbigin内にあるprintメッセージが表示されません。)何か足りない部分があるのでしょうか。色々試してみましたが長時間進まない状態になってしまい質問させて頂きました。何卒よろしくおねがいします。
5
+ 下記のコードにfunc createEnemy()の関数を作って2つのノード「ピペットノード(sprite1)」と「ビーカーノード(sprite2)」を用意しています。それぞれ実機のシミュレーションで物体の表示は出来て、ピペットノードが落下してビーカーノードにぶつかって無事に衝突するまではうまくいくのですが、衝突したときに起動するはずのdidBeginがうまく作動してくれません。(didbigin内にあるprintメッセージが表示されません。)何か足りない部分があるのでしょうか。色々試してみましたが長時間進まない状態になってしまい質問させて頂きました。何卒よろしくおねがいします。
6
6
 
7
7
 
8
8
 
@@ -32,43 +32,139 @@
32
32
 
33
33
 
34
34
 
35
+
36
+
35
- //敵にあたった時のゲームオーバー処理を1回だけにするための変数hitcount
37
+ **
36
-
38
+
37
- var hitcount = 1
39
+ func createEnemy(){
38
-
40
+
41
+
42
+
43
+
44
+
39
- //加速度センサーの作成
45
+ //ピペットノ設定
40
-
41
- var motionMgr = CMMotionManager()//モーションマネージャーのオブジェクトを生成しておく
46
+
42
-
43
- let myBand = SKSpriteNode(imageNamed:"myBand")
47
+ let texture = SKTexture(imageNamed:"pipet")
48
+
44
-
49
+ let sprite1 = SKSpriteNode(texture:texture)
50
+
51
+ sprite1.position = CGPoint(x:130,y:880)
52
+
53
+ sprite1.size=CGSize(width:texture.size().width*0.5,height:texture.size().height*0.5)
54
+
55
+ sprite1.physicsBody = SKPhysicsBody(texture:texture,size:sprite1.size)
56
+
57
+
58
+
59
+ sprite1.physicsBody?.isDynamic = true
60
+
61
+ self.addChild(sprite1)
62
+
63
+
64
+
45
- //ムオ爆発エフェクト
65
+ //設定
46
-
47
- func gameOverParticle(){
66
+
48
-
49
- let particleFire = SKEmitterNode(fileNamed:"gameoverParticle.sks")
67
+ let texture2 = SKTexture(imageNamed: "bika")
68
+
50
-
69
+ let sprite2 = SKSpriteNode(texture:texture2)
70
+
71
+ sprite2.position = CGPoint(x:130,y:150)
72
+
73
+ sprite2.size=CGSize(width:texture2.size().width*0.5,height:texture2.size().height*0.5)
74
+
51
- particleFire!.position = CGPoint(x:self.myBand.position.x,y:self.myBand.position.y)
75
+ sprite2.physicsBody = SKPhysicsBody(texture:texture2,size:sprite2.size)
76
+
52
-
77
+ sprite2.physicsBody?.isDynamic = false
78
+
79
+ self.addChild(sprite2)
80
+
81
+
82
+
83
+
84
+
85
+ //衝突処理
86
+
87
+
88
+
89
+ sprite1.physicsBody?.categoryBitMask=0b0001
90
+
91
+ sprite2.physicsBody?.categoryBitMask=0b0010
92
+
93
+
94
+
95
+ sprite1.physicsBody?.collisionBitMask=0b0010
96
+
97
+ sprite2.physicsBody?.collisionBitMask = 0b0001
98
+
99
+
100
+
53
- particleFire!.position = CGPoint(x:self.myBand.position.x,y:self.myBand.position.y)
101
+ sprite1.physicsBody?.contactTestBitMask=0b0010
54
-
102
+
55
- self.addChild(particleFire!) //←このコマンドはゲームオーバーになった瞬間に発動させる
103
+ sprite2.physicsBody?.contactTestBitMask=0b0001
104
+
105
+
106
+
107
+
108
+
109
+ //デリゲート先に自分を設定する
110
+
111
+ self.physicsWorld.contactDelegate=self
112
+
113
+
114
+
115
+ print("衝突しないのか…")
56
116
 
57
117
  }
58
118
 
59
119
 
60
120
 
121
+
122
+
123
+
124
+
125
+ func didBegin(_contact: SKPhysicsContact) {
126
+
61
- //ゲームオーバー画面への遷移
127
+ print("衝突開始しました!")
128
+
129
+
130
+
62
-
131
+ }
132
+
133
+ **
134
+
135
+
136
+
137
+
138
+
139
+
140
+
141
+
142
+
143
+ func endChangeTimer() {
144
+
145
+
146
+
147
+
148
+
149
+ var owariCount = 0
150
+
151
+ let timerMini = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { (Timer) in
152
+
153
+
154
+
155
+ owariCount+=1
156
+
157
+
158
+
159
+ if owariCount>2
160
+
161
+ {
162
+
63
- func changeScene(){
163
+ self.changeScene()
64
-
65
- let scene99 = endScene(size:frame.size)
164
+
66
-
67
- scene?.scaleMode=self.scaleMode
165
+ }
68
-
69
- let transition = SKTransition.crossFade(withDuration: 0.5)
166
+
70
-
71
- view?.presentScene(scene99,transition:transition)
167
+ }
72
168
 
73
169
  }
74
170
 
@@ -76,318 +172,136 @@
76
172
 
77
173
 
78
174
 
175
+
176
+
177
+
178
+
179
+
180
+
181
+ override func didMove(to view: SKView) {
182
+
183
+ //加速度センサーの計測開始
184
+
185
+ motionMgr.startAccelerometerUpdates()
186
+
187
+ motionMgr.accelerometerUpdateInterval=0.05//何秒おきにデータを計測するかの指示
188
+
189
+ // var jyohou:Double! = self.motionMgr.accelerometerData?.acceleration.x
190
+
191
+
192
+
193
+ //敵を発生させて落下させるメソッド:1秒に1回発動
194
+
195
+
196
+
197
+
198
+
199
+
200
+
201
+ let timerTeki = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { (Timer) in
202
+
203
+ self.createEnemy()
204
+
205
+ }
206
+
207
+
208
+
209
+
210
+
211
+
212
+
213
+
214
+
215
+
216
+
217
+ self.setupScoreLabel()//右上スコア表示発動
218
+
219
+
220
+
79
- //スコアラベル表示
221
+ //自分バンドの設定
80
-
81
- func setupScoreLabel(){
222
+
82
-
83
- var scoreLabelNode:SKLabelNode!
223
+ myBand.name="myBand"
84
-
224
+
225
+
226
+
85
- var eidoKyori = Timer()
227
+ self.addChild(myBand)
86
-
87
- var kyoriCount = 0
228
+
88
-
89
- scoreLabelNode = SKLabelNode(fontNamed: "Arial")
229
+ myBand.size=CGSize(width:60,height:30)
90
-
230
+
91
- scoreLabelNode.position = CGPoint(x:600,y:1130)
231
+ myBand.position=CGPoint(x:300,y:300)
92
-
232
+
93
- scoreLabelNode.fontSize=50
233
+ //↓自分の位置を刻々と変化させる
94
-
95
- scoreLabelNode.fontColor=SKColor.yellow
234
+
96
-
235
+
236
+
237
+
238
+
97
- eidoKyori = Timer.scheduledTimer(withTimeInterval: 0.3, repeats: true, block: { (timer) in
239
+ let timer9 = Timer.scheduledTimer(withTimeInterval: 0.02, repeats: true) { (Timer) in
240
+
241
+
242
+
98
-
243
+ var xi=self.motionMgr.accelerometerData!.acceleration.x
244
+
245
+ var yi=self.motionMgr.accelerometerData!.acceleration.y
246
+
247
+
248
+
99
- kyoriCount = kyoriCount + 1
249
+ var xp=self.myBand.position.x
100
-
250
+
251
+
252
+
101
- // print(kyoriCount)
253
+ // print(self.motionMgr.accelerometerData!.acceleration.x)
102
-
254
+
255
+
256
+
103
- scoreLabelNode.text = String("泳動距離(kyoriCount)")
257
+ self.myBand.position=CGPoint(x:Double(xp)+xi*50,y:Double(self.myBand.position.y)+yi*50)
104
-
105
- })
258
+
106
-
107
- self.addChild(scoreLabelNode)
259
+
108
260
 
109
261
  }
110
262
 
263
+
264
+
265
+
266
+
267
+ //パーティクルを発生させるメソッド
268
+
269
+ //ポイントはparticleの名前の最後に!ビックリマークを入れること。!なぜこれが必要なのか?アンラッピングなど調べる。ass0624
270
+
271
+
272
+
273
+ let particle = SKEmitterNode(fileNamed:"MyParticle.sks")
274
+
275
+ self.addChild(particle!)
276
+
277
+ // particle!.position = CGPoint(x:-100,y:-300)
278
+
279
+ particle!.position = CGPoint(x:myBand.position.x,y:myBand.position.y)
280
+
281
+
282
+
283
+
284
+
285
+ let timerParticle = Timer.scheduledTimer(withTimeInterval: 0.02, repeats: true) { (Timer) in
286
+
111
287
 
112
288
 
113
-
114
-
115
-
116
-
117
-
118
-
119
-
120
-
121
-
122
-
123
- **
124
-
125
- func createEnemy(){
126
-
127
-
128
-
129
-
130
-
131
- //ピペットノードの設定
132
-
133
- let texture = SKTexture(imageNamed:"pipet")
134
-
135
- let sprite1 = SKSpriteNode(texture:texture)
136
-
137
- sprite1.position = CGPoint(x:130,y:880)
138
-
139
- sprite1.size=CGSize(width:texture.size().width*0.5,height:texture.size().height*0.5)
140
-
141
- sprite1.physicsBody = SKPhysicsBody(texture:texture,size:sprite1.size)
289
+ particle!.position = CGPoint(x:self.myBand.position.x,y:self.myBand.position.y)
142
-
143
-
144
-
145
- sprite1.physicsBody?.isDynamic = true
290
+
146
-
147
- self.addChild(sprite1)
291
+
148
-
149
-
150
-
151
- //ビーカーノードの設定
152
-
153
- let texture2 = SKTexture(imageNamed: "bika")
154
-
155
- let sprite2 = SKSpriteNode(texture:texture2)
156
-
157
- sprite2.position = CGPoint(x:130,y:150)
158
-
159
- sprite2.size=CGSize(width:texture2.size().width*0.5,height:texture2.size().height*0.5)
160
-
161
- sprite2.physicsBody = SKPhysicsBody(texture:texture2,size:sprite2.size)
162
-
163
- sprite2.physicsBody?.isDynamic = false
164
-
165
- self.addChild(sprite2)
166
-
167
-
168
-
169
-
170
-
171
- //衝突処理
172
-
173
-
174
-
175
- sprite1.physicsBody?.categoryBitMask=0b0001
176
-
177
- sprite2.physicsBody?.categoryBitMask=0b0010
178
-
179
-
180
-
181
- sprite1.physicsBody?.collisionBitMask=0b0010
182
-
183
- sprite2.physicsBody?.collisionBitMask = 0b0001
184
-
185
-
186
-
187
- sprite1.physicsBody?.contactTestBitMask=0b0010
188
-
189
- sprite2.physicsBody?.contactTestBitMask=0b0001
190
-
191
-
192
-
193
-
194
-
195
- //デリゲート先に自分を設定する
196
-
197
- self.physicsWorld.contactDelegate=self
198
-
199
-
200
-
201
- print("衝突しないのか…")
202
292
 
203
293
  }
204
294
 
205
-
206
-
207
-
208
-
209
-
210
-
211
- func didBegin(_contact: SKPhysicsContact) {
295
+
212
-
213
- print("衝突開始しました!")
296
+
214
-
215
-
216
-
217
- }
297
+
218
-
219
- **
298
+
220
-
221
-
222
-
223
-
224
-
225
-
226
-
227
-
228
-
229
- func endChangeTimer() {
299
+
230
-
231
-
232
-
233
- //for 文章を使って1秒間に+1ずつしていって、ifもし+3になったらは{}内を発動するコード書く
300
+
234
-
235
- var owariCount = 0
301
+
236
-
237
- let timerMini = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { (Timer) in
238
-
239
-
240
-
241
- owariCount+=1
242
-
243
-
244
-
245
- if owariCount>2
246
-
247
- {
248
-
249
- self.changeScene()
250
-
251
- }
252
-
253
- }
254
302
 
255
303
  }
256
304
 
257
-
258
-
259
-
260
-
261
-
262
-
263
-
264
-
265
-
266
-
267
- override func didMove(to view: SKView) {
268
-
269
- //加速度センサーの計測開始
270
-
271
- motionMgr.startAccelerometerUpdates()
272
-
273
- motionMgr.accelerometerUpdateInterval=0.05//何秒おきにデータを計測するかの指示
274
-
275
- // var jyohou:Double! = self.motionMgr.accelerometerData?.acceleration.x
276
-
277
-
278
-
279
- //敵を発生させて落下させるメソッド:1秒に1回発動
280
-
281
-
282
-
283
-
284
-
285
-
286
-
287
- let timerTeki = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { (Timer) in
288
-
289
- self.createEnemy()
290
-
291
- }
292
-
293
-
294
-
295
-
296
-
297
-
298
-
299
-
300
-
301
-
302
-
303
- self.setupScoreLabel()//右上スコア表示発動
304
-
305
-
306
-
307
- //自分のバンドの設定
308
-
309
- myBand.name="myBand"
310
-
311
-
312
-
313
- self.addChild(myBand)
314
-
315
- myBand.size=CGSize(width:60,height:30)
316
-
317
- myBand.position=CGPoint(x:300,y:300)
318
-
319
- //↓自分の位置を刻々と変化させる
320
-
321
-
322
-
323
-
324
-
325
- let timer9 = Timer.scheduledTimer(withTimeInterval: 0.02, repeats: true) { (Timer) in
326
-
327
-
328
-
329
- var xi=self.motionMgr.accelerometerData!.acceleration.x
330
-
331
- var yi=self.motionMgr.accelerometerData!.acceleration.y
332
-
333
-
334
-
335
- var xp=self.myBand.position.x
336
-
337
-
338
-
339
- // print(self.motionMgr.accelerometerData!.acceleration.x)
340
-
341
-
342
-
343
- self.myBand.position=CGPoint(x:Double(xp)+xi*50,y:Double(self.myBand.position.y)+yi*50)
344
-
345
-
346
-
347
- }
348
-
349
-
350
-
351
-
352
-
353
- //パーティクルを発生させるメソッド
354
-
355
- //ポイントはparticleの名前の最後に!ビックリマークを入れること。!なぜこれが必要なのか?アンラッピングなど調べる。ass0624
356
-
357
-
358
-
359
- let particle = SKEmitterNode(fileNamed:"MyParticle.sks")
360
-
361
- self.addChild(particle!)
362
-
363
- // particle!.position = CGPoint(x:-100,y:-300)
364
-
365
- particle!.position = CGPoint(x:myBand.position.x,y:myBand.position.y)
366
-
367
-
368
-
369
-
370
-
371
- let timerParticle = Timer.scheduledTimer(withTimeInterval: 0.02, repeats: true) { (Timer) in
372
-
373
-
374
-
375
- particle!.position = CGPoint(x:self.myBand.position.x,y:self.myBand.position.y)
376
-
377
-
378
-
379
- }
380
-
381
-
382
-
383
-
384
-
385
-
386
-
387
-
388
-
389
- }
390
-
391
305
  }
392
306
 
393
307
 

4

誤字

2019/10/13 12:09

投稿

tsuneet
tsuneet

スコア16

test CHANGED
@@ -1 +1 @@
1
- spritekitの衝突判定didBiginが作動しない
1
+ spritekitの衝突判定didBeginが作動しない
test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  spritekitを使って2つの物体の衝突判定をしたいのですが、うまく認識されません。
4
4
 
5
- 下記のコードの中頃にfunc createEnemy()の関数を作って2つのノード「ピペットノード(sprite1)」と「ビーカーノード(sprite2)」を用意しています。それぞれ実機のシミュレーションで物体の表示は出来て、ピペットノードが落下してビーカーノードにぶつかって無事に衝突するまではうまくいくのですが、衝突したときに起動するはずのdidBiginがうまく作動してくれません。(didbigin内にあるprintメッセージが表示されません。)何か足りない部分があるのでしょうか。色々試してみましたが長時間進まない状態になってしまい質問させて頂きました。何卒よろしくおねがいします。
5
+ 下記のコードの中頃にfunc createEnemy()の関数を作って2つのノード「ピペットノード(sprite1)」と「ビーカーノード(sprite2)」を用意しています。それぞれ実機のシミュレーションで物体の表示は出来て、ピペットノードが落下してビーカーノードにぶつかって無事に衝突するまではうまくいくのですが、衝突したときに起動するはずのdidBeginがうまく作動してくれません。(didbigin内にあるprintメッセージが表示されません。)何か足りない部分があるのでしょうか。色々試してみましたが長時間進まない状態になってしまい質問させて頂きました。何卒よろしくおねがいします。
6
6
 
7
7
 
8
8
 

3

説明文の追記

2019/10/13 11:54

投稿

tsuneet
tsuneet

スコア16

test CHANGED
File without changes
test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  spritekitを使って2つの物体の衝突判定をしたいのですが、うまく認識されません。
4
4
 
5
- 下記のコードの中頃にfunc createEnemy()の関数を作って2つのノード「ピペットノード」と「ビーカーノード」を用意しています。それぞれ実機のシミュレーションで物体の表示は出来て、ピペットノードが落下してビーカーノードにぶつかって無事に衝突するまではうまくいくのですが、衝突したときに起動するはずのdidBiginがうまく作動してくれません。(didbigin内にあるprintメッセージが表示されません。)何か足りない部分があるのでしょうか。色々試してみましたが長時間進まない状態になってしまい質問させて頂きました。何卒よろしくおねがいします。
5
+ 下記のコードの中頃にfunc createEnemy()の関数を作って2つのノード「ピペットノード(sprite1)」と「ビーカーノード(sprite2)」を用意しています。それぞれ実機のシミュレーションで物体の表示は出来て、ピペットノードが落下してビーカーノードにぶつかって無事に衝突するまではうまくいくのですが、衝突したときに起動するはずのdidBiginがうまく作動してくれません。(didbigin内にあるprintメッセージが表示されません。)何か足りない部分があるのでしょうか。色々試してみましたが長時間進まない状態になってしまい質問させて頂きました。何卒よろしくおねがいします。
6
6
 
7
7
 
8
8
 

2

説明文の加筆

2019/10/13 11:42

投稿

tsuneet
tsuneet

スコア16

test CHANGED
File without changes
test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  spritekitを使って2つの物体の衝突判定をしたいのですが、うまく認識されません。
4
4
 
5
- 下記のコードの中頃にfunc createEnemy()の関数を作って2つのノード「ピペットノード」と「ビーカーノード」を用意しています。それぞれ実機のシミュレーションで物体の表示は出来て、ピペットノードが落下してビーカーノードに直撃するまではうまくいくのですが、衝突したときに起動するはずのdidBiginがうまく作動してくれません。(didbigin内にあるprintメッセージが表示されません。)何か足りない部分があるのでしょうか。色々試してみましたが長時間進まない状態になってしまい質問させて頂きました。何卒よろしくおねがいします。
5
+ 下記のコードの中頃にfunc createEnemy()の関数を作って2つのノード「ピペットノード」と「ビーカーノード」を用意しています。それぞれ実機のシミュレーションで物体の表示は出来て、ピペットノードが落下してビーカーノードにぶつかって無事に衝突するまではうまくいくのですが、衝突したときに起動するはずのdidBiginがうまく作動してくれません。(didbigin内にあるprintメッセージが表示されません。)何か足りない部分があるのでしょうか。色々試してみましたが長時間進まない状態になってしまい質問させて頂きました。何卒よろしくおねがいします。
6
6
 
7
7
 
8
8
 

1

タイトルの編集

2019/10/13 10:11

投稿

tsuneet
tsuneet

スコア16

test CHANGED
@@ -1 +1 @@
1
- 衝突判定didBiginが作動しない
1
+ spritekitの衝突判定didBiginが作動しない
test CHANGED
File without changes