質問編集履歴

5

誤字の修正

2021/05/31 12:30

投稿

nimoe
nimoe

スコア1

test CHANGED
File without changes
test CHANGED
@@ -168,8 +168,6 @@
168
168
 
169
169
  mogArray[at] = mog1 //配列を入れ替える
170
170
 
171
- default:
172
-
173
171
  }
174
172
 
175
173
 

4

再度不要なソースの削減。質問内容を訂正しました。

2021/05/31 12:30

投稿

nimoe
nimoe

スコア1

test CHANGED
File without changes
test CHANGED
@@ -1,21 +1,27 @@
1
- swift初心者です。
2
-
3
- もぐらたたきゲームを作ってます。
1
+ swift初心者です。もぐらたたきゲームを作ってます。
4
-
5
- こちらのサイトでプログラマーの方のご協力もあり
2
+
6
-
7
- 3種類のモグラを毎度ランダムに穴から表示さようにはできたのですが、
3
+ 複数種類のモグラを毎度ランダムに穴から表示させているのですが、
4
+
8
-
5
+ 以下のエラーが見受けられ、修正したいです。
6
+
7
+
8
+
9
+ 【エラー内容】
10
+
9
- モグラが消える際に一瞬別のモグラがチラついて表示されてしまいます。
11
+ 表示されたモグラ(A)が消える際に別のモグラ(B)一瞬チラついて表示され
10
-
12
+
11
- チラつくモグラが表示されないようにしたいのですが、
13
+ チラつくモグラが表示されないようにしたい
14
+
15
+
16
+
17
+ 【言語バージョン】
18
+
19
+ swift5
20
+
21
+
12
22
 
13
23
  対応方法をご教授いただきたく、よろしくお願いいたします。
14
24
 
15
- バージョンはswift5です。
16
-
17
-
18
-
19
25
 
20
26
 
21
27
  ```ここに言語を入力
@@ -80,7 +86,7 @@
80
86
 
81
87
  mogArray.append(mog) // モグラを配列に追加する
82
88
 
83
- case 1:
89
+ default:
84
90
 
85
91
  let mog1 = SKSpriteNode(imageNamed: "enemy02.png")
86
92
 
@@ -94,20 +100,6 @@
94
100
 
95
101
  mogArray.append(mog1)
96
102
 
97
- default:
98
-
99
- let mog2 = SKSpriteNode(imageNamed: "enemy03.png")
100
-
101
- mog2.position = i // モグラの位置を指定する
102
-
103
- mog2.zPosition = 1
104
-
105
- mog2.name = "enemy03"
106
-
107
- self.addChild(mog2)// モグラを表示する
108
-
109
- mogArray.append(mog2)
110
-
111
103
  }
112
104
 
113
105
  }
@@ -162,7 +154,7 @@
162
154
 
163
155
  mogArray[at] = mog //配列を入れ替える
164
156
 
165
- case 1:
157
+ default:
166
158
 
167
159
  let mog1 = SKSpriteNode(imageNamed: "enemy02.png")
168
160
 
@@ -178,18 +170,6 @@
178
170
 
179
171
  default:
180
172
 
181
- let mog2 = SKSpriteNode(imageNamed: "enemy03.png")
182
-
183
- mog2.position = mogPoint[at] // モグラの位置を指定する
184
-
185
- mog2.zPosition = 1
186
-
187
- mog2.name = "enemy03"
188
-
189
- self.addChild(mog2)// モグラを表示する
190
-
191
- mogArray[at] = mog2
192
-
193
173
  }
194
174
 
195
175
 

3

シンタックスハイライトし、可能な範囲でソースを削減しました。

2021/05/08 05:34

投稿

nimoe
nimoe

スコア1

test CHANGED
File without changes
test CHANGED
@@ -1,353 +1,233 @@
1
+ swift初心者です。
2
+
3
+ もぐらたたきゲームを作ってます。
4
+
5
+ こちらのサイトでプログラマーの方のご協力もあり
6
+
7
+ 3種類のモグラを毎度ランダムに穴から表示されるようにはできたのですが、
8
+
9
+ モグラが消える際に一瞬別のモグラがチラついて表示されてしまいます。
10
+
11
+ チラつくモグラが表示されないようにしたいのですが、
12
+
13
+ 対応方法をご教授いただきたく、よろしくお願いいたします。
14
+
15
+ バージョンはswift5です。
16
+
17
+
18
+
19
+
20
+
21
+ ```ここに言語を入力
22
+
23
+ import SpriteKit
24
+
25
+
26
+
27
+ class GameScene: SKScene {
28
+
29
+ // モグラの位置([x,y]のセットで4個所)を作る CGPointへ変更
30
+
31
+ let mogPoint = [CGPoint(x:150,y:250),CGPoint(x:250,y:600),
32
+
33
+ CGPoint(x:200,y:800),CGPoint(x:500,y: 400)
34
+
35
+ ]
36
+
37
+ // モグラを入れる配列を用意する(タッチしたかを調べるため)
38
+
39
+ var mogArray:[SKSpriteNode] = []
40
+
41
+ //var myTimer = Timer()
42
+
43
+ override func didMove(to view: SKView) {
44
+
45
+ // モグラの準備をする モグラ穴を作る
46
+
47
+ //mogPoint穴の位置の要素 4回繰り返す
48
+
49
+ for i in mogPoint {
50
+
51
+ let hole = SKSpriteNode(imageNamed: "hole.png")
52
+
53
+ hole.position = i // モグラ穴の位置を指定する
54
+
55
+ self.addChild(hole) // モグラを表示する
56
+
57
+ }
58
+
59
+
60
+
61
+ // 穴の数だけモグラを作る
62
+
63
+ for i in mogPoint {
64
+
65
+ let random = Int(arc4random_uniform(3))
66
+
67
+ switch random {
68
+
69
+ case 0:
70
+
71
+ let mog = SKSpriteNode(imageNamed: "enemy01.png")
72
+
73
+ mog.position = i // モグラの位置を指定する
74
+
75
+ mog.zPosition = 1
76
+
77
+ mog.name = "enemy01"
78
+
79
+ self.addChild(mog)// モグラを表示する
80
+
81
+ mogArray.append(mog) // モグラを配列に追加する
82
+
83
+ case 1:
84
+
85
+ let mog1 = SKSpriteNode(imageNamed: "enemy02.png")
86
+
87
+ mog1.position = i // モグラの位置を指定する
88
+
89
+ mog1.zPosition = 1
90
+
91
+ mog1.name = "enemy02"
92
+
93
+ self.addChild(mog1)// モグラを表示する
94
+
95
+ mogArray.append(mog1)
96
+
97
+ default:
98
+
99
+ let mog2 = SKSpriteNode(imageNamed: "enemy03.png")
100
+
101
+ mog2.position = i // モグラの位置を指定する
102
+
103
+ mog2.zPosition = 1
104
+
105
+ mog2.name = "enemy03"
106
+
107
+ self.addChild(mog2)// モグラを表示する
108
+
109
+ mogArray.append(mog2)
110
+
111
+ }
112
+
113
+ }
114
+
115
+ popAction()
116
+
117
+ }
118
+
119
+
120
+
121
+ // 【モグラが穴から出たり入ったりするアクションをつける】
122
+
123
+ func popAction(){
124
+
125
+ for i in mogArray {
126
+
127
+ i.run(action(pos:i.position), completion: {() -> Void in
128
+
129
+ if let index = self.mogArray.firstIndex(of:i ) {
130
+
131
+ self.changemogura(at:index)
132
+
133
+ }
134
+
135
+ })
136
+
137
+ }
138
+
139
+ }
140
+
141
+ //配列もぐらを変更する。 at:Intはもぐらの配列のインデックス
142
+
143
+ func changemogura(at:Int){
144
+
145
+ let random = Int(arc4random_uniform(3))
146
+
147
+ // print("ランダムの数",random)
148
+
149
+ switch random {
150
+
151
+ case 0:
152
+
153
+ let mog = SKSpriteNode(imageNamed: "enemy01.png")
154
+
155
+ mog.position = mogPoint[at] // モグラの位置を指定する
156
+
157
+ mog.zPosition = 1
158
+
159
+ mog.name = "enemy01"
160
+
161
+ self.addChild(mog)// モグラを表示する
162
+
163
+ mogArray[at] = mog //配列を入れ替える
164
+
165
+ case 1:
166
+
167
+ let mog1 = SKSpriteNode(imageNamed: "enemy02.png")
168
+
169
+ mog1.position = mogPoint[at] // モグラの位置を指定する
170
+
171
+ mog1.zPosition = 1
172
+
173
+ mog1.name = "enemy02"
174
+
175
+ self.addChild(mog1)// モグラを表示する
176
+
177
+ mogArray[at] = mog1 //配列を入れ替える
178
+
179
+ default:
180
+
181
+ let mog2 = SKSpriteNode(imageNamed: "enemy03.png")
182
+
183
+ mog2.position = mogPoint[at] // モグラの位置を指定する
184
+
185
+ mog2.zPosition = 1
186
+
187
+ mog2.name = "enemy03"
188
+
189
+ self.addChild(mog2)// モグラを表示する
190
+
191
+ mogArray[at] = mog2
192
+
193
+ }
194
+
195
+
196
+
197
+ mogArray[at].run(action(pos:mogArray[at].position), completion: {() -> Void in
198
+
199
+ if let removeindex = self.mogArray.firstIndex(of:self.mogArray[at] ) {
200
+
201
+ self.changemogura(at:removeindex)
202
+
203
+ }
204
+
205
+ })
206
+
207
+ }
208
+
209
+
210
+
211
+ //もぐらアクション
212
+
213
+ func action(pos:CGPoint)->SKAction {
214
+
215
+ let action1 = SKAction.moveTo(y: -1000, duration: 0.0)
216
+
217
+ let action2 = SKAction.wait(forDuration: 2.0, withRange: 4.0)
218
+
219
+ let action3 = SKAction.moveTo(y: pos.y, duration: 0.0)
220
+
221
+ let action4 = SKAction.wait(forDuration: 1.0, withRange: 2.0)
222
+
223
+ let remove = SKAction.removeFromParent()
224
+
225
+ let actionS = SKAction.sequence([action1, action2, action3, action4, remove])
226
+
227
+ return SKAction.sequence([actionS])
228
+
229
+ }
230
+
231
+ }
232
+
1
233
  ```
2
-
3
- swift初心者です。
4
-
5
- もぐらたたきゲームを作ってます。
6
-
7
- こちらのサイトでプログラマーの方のご協力もあり
8
-
9
- 3種類のモグラを毎度ランダムに穴から表示されるようにはできたのですが、
10
-
11
- モグラが消える際に一瞬別のモグラがチラついて表示されてしまいます。
12
-
13
- チラつくモグラが表示されないようにしたいのですが、
14
-
15
- 対応方法をご教授いただきたく、よろしくお願いいたします。
16
-
17
- バージョンはswift5です。
18
-
19
-
20
-
21
- ```
22
-
23
-
24
-
25
- import SpriteKit
26
-
27
-
28
-
29
- class GameScene: SKScene {
30
-
31
- // モグラの位置([x,y]のセットで8個所)を作る CGPointへ変更
32
-
33
- let mogPoint = [CGPoint(x:150,y:250),CGPoint(x:250,y:600),
34
-
35
- CGPoint(x:200,y:800),CGPoint(x:500,y: 400),
36
-
37
- CGPoint(x:550,y:150),CGPoint(x:650,y: 700),
38
-
39
- CGPoint(x:550.0,y: 950),CGPoint(x:300,y: 1100)]
40
-
41
- // モグラを入れる配列を用意する(タッチしたかを調べるため)
42
-
43
- var mogArray:[SKSpriteNode] = []
44
-
45
- //var myTimer = Timer()
46
-
47
- override func didMove(to view: SKView) {
48
-
49
- // モグラの準備をする モグラ穴を作る
50
-
51
- //mogPoint穴の位置の要素 8回繰り返す
52
-
53
- for i in mogPoint {
54
-
55
- let hole = SKSpriteNode(imageNamed: "hole.png")
56
-
57
- hole.position = i // モグラ穴の位置を指定する
58
-
59
- self.addChild(hole) // モグラを表示する
60
-
61
- }
62
-
63
-
64
-
65
-
66
-
67
- // タイマーをスタートする(1.0秒ごとにtimerUpdateを繰り返し実行)
68
-
69
- //Timer.scheduledTimer(timeInterval: 1.0, target:self,selector:#selector(timerUpdate),userInfo:nil,repeats:true)
70
-
71
- // 穴の数だけモグラを作る
72
-
73
- for i in mogPoint {
74
-
75
- let random = Int(arc4random_uniform(3))
76
-
77
- switch random {
78
-
79
- case 0:
80
-
81
- let mog = SKSpriteNode(imageNamed: "enemy01.png")
82
-
83
- mog.position = i // モグラの位置を指定する
84
-
85
- mog.zPosition = 1
86
-
87
- mog.name = "enemy01"
88
-
89
- self.addChild(mog)// モグラを表示する
90
-
91
- mogArray.append(mog) // モグラを配列に追加する
92
-
93
- case 1:
94
-
95
- let mog1 = SKSpriteNode(imageNamed: "enemy02.png")
96
-
97
- mog1.position = i // モグラの位置を指定する
98
-
99
- mog1.zPosition = 1
100
-
101
- mog1.name = "enemy02"
102
-
103
- self.addChild(mog1)// モグラを表示する
104
-
105
- mogArray.append(mog1)
106
-
107
- default:
108
-
109
- let mog2 = SKSpriteNode(imageNamed: "enemy03.png")
110
-
111
- mog2.position = i // モグラの位置を指定する
112
-
113
- mog2.zPosition = 1
114
-
115
- mog2.name = "enemy03"
116
-
117
- self.addChild(mog2)// モグラを表示する
118
-
119
- mogArray.append(mog2)
120
-
121
- }
122
-
123
- }
124
-
125
- popAction()
126
-
127
- }
128
-
129
-
130
-
131
- // 【モグラが穴から出たり入ったりするアクションをつける】
132
-
133
- func popAction(){
134
-
135
- for i in mogArray {
136
-
137
- i.run(action(pos:i.position), completion: {() -> Void in
138
-
139
- if let index = self.mogArray.firstIndex(of:i ) {
140
-
141
- self.changemogura(at:index)
142
-
143
- }
144
-
145
- })
146
-
147
- }
148
-
149
- }
150
-
151
- //配列もぐらを変更する。 at:Intはもぐらの配列のインデックス
152
-
153
- func changemogura(at:Int){
154
-
155
- let random = Int(arc4random_uniform(3))
156
-
157
- // print("ランダムの数",random)
158
-
159
- switch random {
160
-
161
- case 0:
162
-
163
- let mog = SKSpriteNode(imageNamed: "enemy01.png")
164
-
165
- mog.position = mogPoint[at] // モグラの位置を指定する
166
-
167
- mog.zPosition = 1
168
-
169
- mog.name = "enemy01"
170
-
171
- self.addChild(mog)// モグラを表示する
172
-
173
- mogArray[at] = mog //配列を入れ替える
174
-
175
- case 1:
176
-
177
- let mog1 = SKSpriteNode(imageNamed: "enemy02.png")
178
-
179
- mog1.position = mogPoint[at] // モグラの位置を指定する
180
-
181
- mog1.zPosition = 1
182
-
183
- mog1.name = "enemy02"
184
-
185
- self.addChild(mog1)// モグラを表示する
186
-
187
- mogArray[at] = mog1 //配列を入れ替える
188
-
189
- default:
190
-
191
- let mog2 = SKSpriteNode(imageNamed: "enemy03.png")
192
-
193
- mog2.position = mogPoint[at] // モグラの位置を指定する
194
-
195
- mog2.zPosition = 1
196
-
197
- mog2.name = "enemy03"
198
-
199
- self.addChild(mog2)// モグラを表示する
200
-
201
- mogArray[at] = mog2
202
-
203
- }
204
-
205
-
206
-
207
- mogArray[at].run(action(pos:mogArray[at].position), completion: {() -> Void in
208
-
209
- if let removeindex = self.mogArray.firstIndex(of:self.mogArray[at] ) {
210
-
211
- self.changemogura(at:removeindex)
212
-
213
- }
214
-
215
- })
216
-
217
- }
218
-
219
-
220
-
221
- //もぐらアクション
222
-
223
- func action(pos:CGPoint)->SKAction {
224
-
225
- let action1 = SKAction.moveTo(y: -1000, duration: 0.0)
226
-
227
- let action2 = SKAction.wait(forDuration: 2.0, withRange: 4.0)
228
-
229
- let action3 = SKAction.moveTo(y: pos.y, duration: 0.0)
230
-
231
- let action4 = SKAction.wait(forDuration: 1.0, withRange: 2.0)
232
-
233
- let remove = SKAction.removeFromParent()
234
-
235
- let actionS = SKAction.sequence([action1, action2, action3, action4, remove])
236
-
237
- return SKAction.sequence([actionS])
238
-
239
- }
240
-
241
-
242
-
243
- // タイマーで実行される処理(1.0秒ごとに繰り返し実行)
244
-
245
- //@objc func timerUpdate() {
246
-
247
- // }
248
-
249
-
250
-
251
- // タッチしたときの処理
252
-
253
- override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
254
-
255
- for touch: AnyObject in touches {
256
-
257
- let location = touch.location(in: self)
258
-
259
- // タッチした位置にあるものを調べる
260
-
261
- let touchNode = self.atPoint(location)
262
-
263
- actionS(touch:touchNode)
264
-
265
- }
266
-
267
- }
268
-
269
-
270
-
271
-
272
-
273
-
274
-
275
-
276
-
277
- func actionS(touch:SKNode){
278
-
279
- for i in mogArray { // 配列の要素を繰り返す
280
-
281
- // もし、タッチしたものがモグラだったら、やっつける
282
-
283
- if touch == i { // スコアをアップして、表示する
284
-
285
- switch i.name {
286
-
287
- case "enemy01":
288
-
289
- print("01")
290
-
291
- case "enemy02":
292
-
293
- print("02")
294
-
295
- case "enemy03":
296
-
297
- print("03")
298
-
299
- default:print("その他")
300
-
301
- }
302
-
303
-
304
-
305
- let mog = SKSpriteNode(imageNamed: "mog3.png")
306
-
307
- // やられたモグラを作る
308
-
309
- mog.position = touch.position
310
-
311
- // 位置を指定する
312
-
313
- self.addChild(mog)
314
-
315
- // やられたモグラを表示させる
316
-
317
- // 【モグラに回転しながら上に飛び出して消えるアクションをつける】
318
-
319
- // モグラを1回転するアクション
320
-
321
- let action1 = SKAction.rotate(byAngle: 6.28, duration: 0.3)
322
-
323
- // モグラを上に100移動するアクション
324
-
325
- let action2 = SKAction.moveTo(y: touch.position.y + 150, duration: 0.3)
326
-
327
- // action1とaction2を同時に行う
328
-
329
- let actionG = SKAction.group([action1, action2])
330
-
331
- // モグラを削除するアクション
332
-
333
- let action3 = SKAction.removeFromParent()
334
-
335
- // actionGとaction3を順番に行う
336
-
337
- let actionS = SKAction.sequence([actionG, action3])
338
-
339
- // モグラに「回転しながら上に飛び出して消えるアクション」をつける
340
-
341
- mog.run(actionS)
342
-
343
- touch.position.y = -1000
344
-
345
- // モグラを地下(-1000)に移動して消す
346
-
347
- }
348
-
349
- }
350
-
351
- }
352
-
353
- }

2

タイトル含め全体的に書き直しました。

2021/05/08 05:17

投稿

nimoe
nimoe

スコア1

test CHANGED
@@ -1 +1 @@
1
- もぐらたたきでキャクターを複数ンダムに表示したい
1
+ モグラたたきゲーム一瞬チつくモグ表示されないようにしたい
test CHANGED
@@ -4,13 +4,15 @@
4
4
 
5
5
  もぐらたたきゲームを作ってます。
6
6
 
7
- 3種類もぐらを表示させたいす。(現状は1種類み表示)
7
+ こちらサイトプログラマー方のご協力もあり
8
-
9
- 穴の配列に別のもぐらを追加してみたところもぐらが出る穴が固定されてしまうため断念しました。
8
+
10
-
11
- 3種類のもぐら表示、かつ毎度ランダムに穴から表示されるように
9
+ 3種類のモグラを毎度ランダムに穴から表示されるようにはできのですが
10
+
12
-
11
+ モグラが消える際に一瞬別のモグラがチラついて表示されてしまいます。
12
+
13
+ チラつくモグラが表示されないようにしたいのですが、
14
+
13
- どなたかご教授いただきたく、よろしくお願いいたします。
15
+ 対応方法をご教授いただきたく、よろしくお願いいたします。
14
16
 
15
17
  バージョンはswift5です。
16
18
 
@@ -20,139 +22,327 @@
20
22
 
21
23
 
22
24
 
23
-
24
-
25
-
26
-
27
-
28
-
29
- import UIKit
30
-
31
25
  import SpriteKit
32
26
 
33
27
 
34
28
 
35
- class GameScene: SKScene,SKPhysicsContactDelegate {
36
-
37
-
38
-
39
- ///モグラの位置
40
-
41
- let enemyPoint = [[150,250],[250,600],[200,800],[500,400],[550,150],[650,700],[550,950],[300,1100]]
42
-
43
-
44
-
45
- ///モグラを入れる配列
46
-
47
- var enemy01Array:[SKSpriteNode] = []
48
-
49
-
50
-
51
- override func didMove(to view: SKView) {
52
-
53
-
54
-
55
- //もぐら用意
56
-
57
- for i in 0...7{
58
-
59
-
60
-
61
- //穴
62
-
63
- let hole = SKSpriteNode(imageNamed:"hole.png")
64
-
65
- hole.position = CGPoint(x:enemyPoint[i][0],y:enemyPoint[i][1])
66
-
67
- self.addChild(hole)
68
-
69
-
70
-
71
- //もぐら
72
-
73
- let enemy01 = SKSpriteNode(imageNamed: "enemy01.png")
74
-
75
- enemy01.position = CGPoint(x:enemyPoint[i][0],y:enemyPoint[i][1])
76
-
77
- enemy01Array.append(enemy01)
78
-
79
-
80
-
81
- let action1 = SKAction.moveTo(y: -1000,duration:0.0)
82
-
83
- let action2 = SKAction.wait(forDuration: 0.5,withRange:1.5)
84
-
85
- let action3 = SKAction.moveTo(y: hole.position.y,duration:0.0)
86
-
87
- let action4 = SKAction.wait(forDuration: 0.5,withRange:1.0)
88
-
89
- let actionS = SKAction.sequence([action1,action2,action3,action4])
90
-
91
- let actionR = SKAction.repeatForever(actionS)
92
-
93
-
94
-
95
- self.addChild(enemy01)
96
-
97
- enemy01.run(actionR)
29
+ class GameScene: SKScene {
30
+
31
+ // モグラの位置([x,y]のセットで8個所)を作る CGPointへ変更
32
+
33
+ let mogPoint = [CGPoint(x:150,y:250),CGPoint(x:250,y:600),
34
+
35
+ CGPoint(x:200,y:800),CGPoint(x:500,y: 400),
36
+
37
+ CGPoint(x:550,y:150),CGPoint(x:650,y: 700),
38
+
39
+ CGPoint(x:550.0,y: 950),CGPoint(x:300,y: 1100)]
40
+
41
+ // モグラを入れる配列を用意する(タッチしたかを調べるため)
42
+
43
+ var mogArray:[SKSpriteNode] = []
44
+
45
+ //var myTimer = Timer()
46
+
47
+ override func didMove(to view: SKView) {
48
+
49
+ // モグラ準備をする モグラ穴を作る
50
+
51
+ //mogPoint穴の位置の要素 8回繰り返す
52
+
53
+ for i in mogPoint {
54
+
55
+ let hole = SKSpriteNode(imageNamed: "hole.png")
56
+
57
+ hole.position = i // モグラ穴の位置を指定する
58
+
59
+ self.addChild(hole) // モグラを表示する
60
+
61
+ }
62
+
63
+
64
+
65
+
66
+
67
+ // タイマーをスタートする(1.0秒ごとにtimerUpdateを繰り返し実行)
68
+
69
+ //Timer.scheduledTimer(timeInterval: 1.0, target:self,selector:#selector(timerUpdate),userInfo:nil,repeats:true)
70
+
71
+ // 穴の数だけモグラを作る
72
+
73
+ for i in mogPoint {
74
+
75
+ let random = Int(arc4random_uniform(3))
76
+
77
+ switch random {
78
+
79
+ case 0:
80
+
81
+ let mog = SKSpriteNode(imageNamed: "enemy01.png")
82
+
83
+ mog.position = i // モグラの位置を指定する
84
+
85
+ mog.zPosition = 1
86
+
87
+ mog.name = "enemy01"
88
+
89
+ self.addChild(mog)// モグラを表示する
90
+
91
+ mogArray.append(mog) // モグラを配列に追加する
92
+
93
+ case 1:
94
+
95
+ let mog1 = SKSpriteNode(imageNamed: "enemy02.png")
96
+
97
+ mog1.position = i // モグラの位置を指定する
98
+
99
+ mog1.zPosition = 1
100
+
101
+ mog1.name = "enemy02"
102
+
103
+ self.addChild(mog1)// モグラを表示する
104
+
105
+ mogArray.append(mog1)
106
+
107
+ default:
108
+
109
+ let mog2 = SKSpriteNode(imageNamed: "enemy03.png")
110
+
111
+ mog2.position = i // モグラの位置を指定する
112
+
113
+ mog2.zPosition = 1
114
+
115
+ mog2.name = "enemy03"
116
+
117
+ self.addChild(mog2)// モグラを表示する
118
+
119
+ mogArray.append(mog2)
120
+
121
+ }
98
122
 
99
123
  }
100
124
 
125
+ popAction()
126
+
101
- }
127
+ }
128
+
129
+
130
+
102
-
131
+ // 【モグラが穴から出たり入ったりするアクションをつける】
132
+
103
-
133
+ func popAction(){
134
+
104
-
135
+ for i in mogArray {
136
+
105
-
137
+ i.run(action(pos:i.position), completion: {() -> Void in
138
+
139
+ if let index = self.mogArray.firstIndex(of:i ) {
140
+
141
+ self.changemogura(at:index)
142
+
143
+ }
144
+
145
+ })
146
+
147
+ }
148
+
149
+ }
150
+
151
+ //配列もぐらを変更する。 at:Intはもぐらの配列のインデックス
152
+
153
+ func changemogura(at:Int){
154
+
155
+ let random = Int(arc4random_uniform(3))
156
+
157
+ // print("ランダムの数",random)
158
+
159
+ switch random {
160
+
161
+ case 0:
162
+
163
+ let mog = SKSpriteNode(imageNamed: "enemy01.png")
164
+
165
+ mog.position = mogPoint[at] // モグラの位置を指定する
166
+
167
+ mog.zPosition = 1
168
+
169
+ mog.name = "enemy01"
170
+
171
+ self.addChild(mog)// モグラを表示する
172
+
173
+ mogArray[at] = mog //配列を入れ替える
174
+
175
+ case 1:
176
+
177
+ let mog1 = SKSpriteNode(imageNamed: "enemy02.png")
178
+
179
+ mog1.position = mogPoint[at] // モグラの位置を指定する
180
+
181
+ mog1.zPosition = 1
182
+
183
+ mog1.name = "enemy02"
184
+
185
+ self.addChild(mog1)// モグラを表示する
186
+
187
+ mogArray[at] = mog1 //配列を入れ替える
188
+
189
+ default:
190
+
191
+ let mog2 = SKSpriteNode(imageNamed: "enemy03.png")
192
+
193
+ mog2.position = mogPoint[at] // モグラの位置を指定する
194
+
195
+ mog2.zPosition = 1
196
+
197
+ mog2.name = "enemy03"
198
+
199
+ self.addChild(mog2)// モグラを表示する
200
+
201
+ mogArray[at] = mog2
202
+
203
+ }
204
+
205
+
206
+
207
+ mogArray[at].run(action(pos:mogArray[at].position), completion: {() -> Void in
208
+
209
+ if let removeindex = self.mogArray.firstIndex(of:self.mogArray[at] ) {
210
+
211
+ self.changemogura(at:removeindex)
212
+
213
+ }
214
+
215
+ })
216
+
217
+ }
218
+
219
+
220
+
221
+ //もぐらアクション
222
+
223
+ func action(pos:CGPoint)->SKAction {
224
+
225
+ let action1 = SKAction.moveTo(y: -1000, duration: 0.0)
226
+
227
+ let action2 = SKAction.wait(forDuration: 2.0, withRange: 4.0)
228
+
229
+ let action3 = SKAction.moveTo(y: pos.y, duration: 0.0)
230
+
231
+ let action4 = SKAction.wait(forDuration: 1.0, withRange: 2.0)
232
+
233
+ let remove = SKAction.removeFromParent()
234
+
235
+ let actionS = SKAction.sequence([action1, action2, action3, action4, remove])
236
+
237
+ return SKAction.sequence([actionS])
238
+
239
+ }
240
+
241
+
242
+
243
+ // タイマーで実行される処理(1.0秒ごとに繰り返し実行)
244
+
245
+ //@objc func timerUpdate() {
246
+
247
+ // }
248
+
249
+
250
+
251
+ // タッチしたときの処理
106
252
 
107
253
  override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
108
254
 
109
- if let touch:AnyObject = touches.first{
110
-
111
- let location = touch.location(in:self)
112
-
113
- let touchNode = self.atPoint(location)//btnSprite.position読み取ってい
114
-
115
-
116
-
117
- for i in 0...7{
118
-
119
-
120
-
121
- if touchNode == enemy01Array[i]{
122
-
123
-
124
-
125
- let enemy01 = SKSpriteNode(imageNamed:"enemy01")
126
-
127
- enemy01.position = touchNode.position
128
-
129
- self.addChild(enemy01)
130
-
131
-
132
-
133
- //モグラ1回転るアクション
134
-
135
- let action1 = SKAction.rotate(byAngle: 6.28, duration: 0.2)
136
-
137
-
138
-
139
- //モグラを上に100移動
140
-
141
- let action2 = SKAction.moveTo(y: touchNode.position.y + 150,duration: 0.2)
142
-
143
- let actionG = SKAction.group([action1,action2])
144
-
145
- let action3 = SKAction.removeFromParent()
146
-
147
- let actionS = SKAction.sequence([actionG,action3])
148
-
149
- enemy01.run(actionS)
150
-
151
- //モグラを-1000に移動して消す
152
-
153
- touchNode.position.y = -1000
154
-
155
- }
255
+ for touch: AnyObject in touches {
256
+
257
+ let location = touch.location(in: self)
258
+
259
+ // タッチした位置にあるもの調べ
260
+
261
+ let touchNode = self.atPoint(location)
262
+
263
+ actionS(touch:touchNode)
264
+
265
+ }
266
+
267
+ }
268
+
269
+
270
+
271
+
272
+
273
+
274
+
275
+
276
+
277
+ func actionS(touch:SKNode){
278
+
279
+ for i in mogArray { // 配列の要素繰り返
280
+
281
+ // もし、タッチしたものがモグラだったら、やっつける
282
+
283
+ if touch == i { // スコアをアップして、表示する
284
+
285
+ switch i.name {
286
+
287
+ case "enemy01":
288
+
289
+ print("01")
290
+
291
+ case "enemy02":
292
+
293
+ print("02")
294
+
295
+ case "enemy03":
296
+
297
+ print("03")
298
+
299
+ default:print("その他")
300
+
301
+ }
302
+
303
+
304
+
305
+ let mog = SKSpriteNode(imageNamed: "mog3.png")
306
+
307
+ // やられたモグラを作る
308
+
309
+ mog.position = touch.position
310
+
311
+ // 位置を指定する
312
+
313
+ self.addChild(mog)
314
+
315
+ // やられたモグラを表示させる
316
+
317
+ // 【モグラに回転しながら上に飛び出して消えるアクションをつける】
318
+
319
+ // モグラを1回転するアクション
320
+
321
+ let action1 = SKAction.rotate(byAngle: 6.28, duration: 0.3)
322
+
323
+ // モグラを上に100移動するアクション
324
+
325
+ let action2 = SKAction.moveTo(y: touch.position.y + 150, duration: 0.3)
326
+
327
+ // action1とaction2を同時に行う
328
+
329
+ let actionG = SKAction.group([action1, action2])
330
+
331
+ // モグラを削除するアクション
332
+
333
+ let action3 = SKAction.removeFromParent()
334
+
335
+ // actionGとaction3を順番に行う
336
+
337
+ let actionS = SKAction.sequence([actionG, action3])
338
+
339
+ // モグラに「回転しながら上に飛び出して消えるアクション」をつける
340
+
341
+ mog.run(actionS)
342
+
343
+ touch.position.y = -1000
344
+
345
+ // モグラを地下(-1000)に移動して消す
156
346
 
157
347
  }
158
348
 
@@ -160,6 +350,4 @@
160
350
 
161
351
  }
162
352
 
163
-
164
-
165
353
  }

1

swiftバージョンを追記

2021/05/07 04:17

投稿

nimoe
nimoe

スコア1

test CHANGED
@@ -1 +1 @@
1
- もぐらたたきでキャラクターを複数表示したい
1
+ もぐらたたきでキャラクターを複数ランダムに表示したい
test CHANGED
@@ -11,6 +11,8 @@
11
11
  3種類のもぐらを表示、かつ毎度ランダムに穴から表示されるようにしたく、
12
12
 
13
13
  どなたかご教授いただきたく、よろしくお願いいたします。
14
+
15
+ バージョンはswift5です。
14
16
 
15
17
 
16
18
 
@@ -160,10 +162,4 @@
160
162
 
161
163
 
162
164
 
163
- override func update(_ currentTime: TimeInterval) {
164
-
165
- // Called before each frame is rendered
166
-
167
- }
168
-
169
165
  }