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

質問編集履歴

5

誤字の修正

2021/05/31 12:30

投稿

nimoe
nimoe

スコア1

title CHANGED
File without changes
body CHANGED
@@ -83,7 +83,6 @@
83
83
  mog1.name = "enemy02"
84
84
  self.addChild(mog1)// モグラを表示する
85
85
  mogArray[at] = mog1 //配列を入れ替える
86
- default:
87
86
  }
88
87
 
89
88
  mogArray[at].run(action(pos:mogArray[at].position), completion: {() -> Void in

4

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

2021/05/31 12:30

投稿

nimoe
nimoe

スコア1

title CHANGED
File without changes
body CHANGED
@@ -1,13 +1,16 @@
1
- swift初心者です。
2
- もぐらたたきゲームを作ってます。
1
+ swift初心者です。もぐらたたきゲームを作ってます。
3
- こちらのサイトでプログラマーの方のご協力もあり
4
- 3種類のモグラを毎度ランダムに穴から表示さようにはできたのですが、
2
+ 複数種類のモグラを毎度ランダムに穴から表示させているのですが、
3
+ 以下のエラーが見受けられ、修正したいです。
4
+
5
+ 【エラー内容】
5
- モグラが消える際に一瞬別のモグラがチラついて表示されてしまいます。
6
+ 表示されたモグラ(A)が消える際に別のモグラ(B)一瞬チラついて表示され
6
- チラつくモグラが表示されないようにしたいのですが、
7
+ チラつくモグラが表示されないようにしたい
8
+
9
+ 【言語バージョン】
10
+ swift5
11
+
7
12
  対応方法をご教授いただきたく、よろしくお願いいたします。
8
- バージョンはswift5です。
9
13
 
10
-
11
14
  ```ここに言語を入力
12
15
  import SpriteKit
13
16
 
@@ -39,20 +42,13 @@
39
42
  mog.name = "enemy01"
40
43
  self.addChild(mog)// モグラを表示する
41
44
  mogArray.append(mog) // モグラを配列に追加する
42
- case 1:
45
+ default:
43
46
  let mog1 = SKSpriteNode(imageNamed: "enemy02.png")
44
47
  mog1.position = i // モグラの位置を指定する
45
48
  mog1.zPosition = 1
46
49
  mog1.name = "enemy02"
47
50
  self.addChild(mog1)// モグラを表示する
48
51
  mogArray.append(mog1)
49
- default:
50
- let mog2 = SKSpriteNode(imageNamed: "enemy03.png")
51
- mog2.position = i // モグラの位置を指定する
52
- mog2.zPosition = 1
53
- mog2.name = "enemy03"
54
- self.addChild(mog2)// モグラを表示する
55
- mogArray.append(mog2)
56
52
  }
57
53
  }
58
54
  popAction()
@@ -80,7 +76,7 @@
80
76
  mog.name = "enemy01"
81
77
  self.addChild(mog)// モグラを表示する
82
78
  mogArray[at] = mog //配列を入れ替える
83
- case 1:
79
+ default:
84
80
  let mog1 = SKSpriteNode(imageNamed: "enemy02.png")
85
81
  mog1.position = mogPoint[at] // モグラの位置を指定する
86
82
  mog1.zPosition = 1
@@ -88,12 +84,6 @@
88
84
  self.addChild(mog1)// モグラを表示する
89
85
  mogArray[at] = mog1 //配列を入れ替える
90
86
  default:
91
- let mog2 = SKSpriteNode(imageNamed: "enemy03.png")
92
- mog2.position = mogPoint[at] // モグラの位置を指定する
93
- mog2.zPosition = 1
94
- mog2.name = "enemy03"
95
- self.addChild(mog2)// モグラを表示する
96
- mogArray[at] = mog2
97
87
  }
98
88
 
99
89
  mogArray[at].run(action(pos:mogArray[at].position), completion: {() -> Void in

3

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

2021/05/08 05:34

投稿

nimoe
nimoe

スコア1

title CHANGED
File without changes
body CHANGED
@@ -1,4 +1,3 @@
1
- ```
2
1
  swift初心者です。
3
2
  もぐらたたきゲームを作ってます。
4
3
  こちらのサイトでプログラマーの方のご協力もあり
@@ -8,31 +7,27 @@
8
7
  対応方法をご教授いただきたく、よろしくお願いいたします。
9
8
  バージョンはswift5です。
10
9
 
11
- ```
12
10
 
11
+ ```ここに言語を入力
13
12
  import SpriteKit
14
13
 
15
14
  class GameScene: SKScene {
16
- // モグラの位置([x,y]のセットで8個所)を作る CGPointへ変更
15
+ // モグラの位置([x,y]のセットで4個所)を作る CGPointへ変更
17
16
  let mogPoint = [CGPoint(x:150,y:250),CGPoint(x:250,y:600),
18
- CGPoint(x:200,y:800),CGPoint(x:500,y: 400),
17
+ CGPoint(x:200,y:800),CGPoint(x:500,y: 400)
19
- CGPoint(x:550,y:150),CGPoint(x:650,y: 700),
20
- CGPoint(x:550.0,y: 950),CGPoint(x:300,y: 1100)]
18
+ ]
21
19
  // モグラを入れる配列を用意する(タッチしたかを調べるため)
22
20
  var mogArray:[SKSpriteNode] = []
23
21
  //var myTimer = Timer()
24
22
  override func didMove(to view: SKView) {
25
23
  // モグラの準備をする モグラ穴を作る
26
- //mogPoint穴の位置の要素 8回繰り返す
24
+ //mogPoint穴の位置の要素 4回繰り返す
27
25
  for i in mogPoint {
28
26
  let hole = SKSpriteNode(imageNamed: "hole.png")
29
27
  hole.position = i // モグラ穴の位置を指定する
30
28
  self.addChild(hole) // モグラを表示する
31
29
  }
32
30
 
33
-
34
- // タイマーをスタートする(1.0秒ごとにtimerUpdateを繰り返し実行)
35
- //Timer.scheduledTimer(timeInterval: 1.0, target:self,selector:#selector(timerUpdate),userInfo:nil,repeats:true)
36
31
  // 穴の数だけモグラを作る
37
32
  for i in mogPoint {
38
33
  let random = Int(arc4random_uniform(3))
@@ -118,60 +113,5 @@
118
113
  let actionS = SKAction.sequence([action1, action2, action3, action4, remove])
119
114
  return SKAction.sequence([actionS])
120
115
  }
121
-
122
- // タイマーで実行される処理(1.0秒ごとに繰り返し実行)
123
- //@objc func timerUpdate() {
124
- // }
125
-
126
- // タッチしたときの処理
127
- override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
128
- for touch: AnyObject in touches {
129
- let location = touch.location(in: self)
130
- // タッチした位置にあるものを調べる
131
- let touchNode = self.atPoint(location)
132
- actionS(touch:touchNode)
133
- }
116
+ }
134
- }
117
+ ```
135
-
136
-
137
-
138
-
139
- func actionS(touch:SKNode){
140
- for i in mogArray { // 配列の要素を繰り返す
141
- // もし、タッチしたものがモグラだったら、やっつける
142
- if touch == i { // スコアをアップして、表示する
143
- switch i.name {
144
- case "enemy01":
145
- print("01")
146
- case "enemy02":
147
- print("02")
148
- case "enemy03":
149
- print("03")
150
- default:print("その他")
151
- }
152
-
153
- let mog = SKSpriteNode(imageNamed: "mog3.png")
154
- // やられたモグラを作る
155
- mog.position = touch.position
156
- // 位置を指定する
157
- self.addChild(mog)
158
- // やられたモグラを表示させる
159
- // 【モグラに回転しながら上に飛び出して消えるアクションをつける】
160
- // モグラを1回転するアクション
161
- let action1 = SKAction.rotate(byAngle: 6.28, duration: 0.3)
162
- // モグラを上に100移動するアクション
163
- let action2 = SKAction.moveTo(y: touch.position.y + 150, duration: 0.3)
164
- // action1とaction2を同時に行う
165
- let actionG = SKAction.group([action1, action2])
166
- // モグラを削除するアクション
167
- let action3 = SKAction.removeFromParent()
168
- // actionGとaction3を順番に行う
169
- let actionS = SKAction.sequence([actionG, action3])
170
- // モグラに「回転しながら上に飛び出して消えるアクション」をつける
171
- mog.run(actionS)
172
- touch.position.y = -1000
173
- // モグラを地下(-1000)に移動して消す
174
- }
175
- }
176
- }
177
- }

2

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

2021/05/08 05:17

投稿

nimoe
nimoe

スコア1

title CHANGED
@@ -1,1 +1,1 @@
1
- もぐらたたきでキャクターを複数ンダムに表示したい
1
+ モグラたたきゲーム一瞬チつくモグ表示されないようにしたい
body CHANGED
@@ -1,83 +1,177 @@
1
1
  ```
2
2
  swift初心者です。
3
3
  もぐらたたきゲームを作ってます。
4
- 3種類のもぐを表示させたいす。(現状は1種類み表示)
4
+ こちのサイトプログラマー方のご協力もあり
5
- 穴の配列に別のもぐらを追加してみたところもぐらが出る穴が固定されてしまうため断念しました。
6
- 3種類のもぐら表示、かつ毎度ランダムに穴から表示されるように
5
+ 3種類のモグラを毎度ランダムに穴から表示されるようにはできのですが
6
+ モグラが消える際に一瞬別のモグラがチラついて表示されてしまいます。
7
+ チラつくモグラが表示されないようにしたいのですが、
7
- どなたかご教授いただきたく、よろしくお願いいたします。
8
+ 対応方法をご教授いただきたく、よろしくお願いいたします。
8
9
  バージョンはswift5です。
9
10
 
10
11
  ```
11
12
 
13
+ import SpriteKit
12
14
 
15
+ class GameScene: SKScene {
16
+ // モグラの位置([x,y]のセットで8個所)を作る CGPointへ変更
17
+ let mogPoint = [CGPoint(x:150,y:250),CGPoint(x:250,y:600),
18
+ CGPoint(x:200,y:800),CGPoint(x:500,y: 400),
19
+ CGPoint(x:550,y:150),CGPoint(x:650,y: 700),
20
+ CGPoint(x:550.0,y: 950),CGPoint(x:300,y: 1100)]
21
+ // モグラを入れる配列を用意する(タッチしたかを調べるため)
22
+ var mogArray:[SKSpriteNode] = []
23
+ //var myTimer = Timer()
24
+ override func didMove(to view: SKView) {
25
+ // モグラの準備をする モグラ穴を作る
26
+ //mogPoint穴の位置の要素 8回繰り返す
27
+ for i in mogPoint {
28
+ let hole = SKSpriteNode(imageNamed: "hole.png")
29
+ hole.position = i // モグラ穴の位置を指定する
30
+ self.addChild(hole) // モグラを表示する
31
+ }
13
32
 
14
33
 
34
+ // タイマーをスタートする(1.0秒ごとにtimerUpdateを繰り返し実行)
35
+ //Timer.scheduledTimer(timeInterval: 1.0, target:self,selector:#selector(timerUpdate),userInfo:nil,repeats:true)
36
+ // 穴の数だけモグラを作る
37
+ for i in mogPoint {
38
+ let random = Int(arc4random_uniform(3))
39
+ switch random {
40
+ case 0:
41
+ let mog = SKSpriteNode(imageNamed: "enemy01.png")
42
+ mog.position = i // モグラの位置を指定する
43
+ mog.zPosition = 1
44
+ mog.name = "enemy01"
45
+ self.addChild(mog)// モグラを表示する
46
+ mogArray.append(mog) // モグラを配列に追加する
47
+ case 1:
48
+ let mog1 = SKSpriteNode(imageNamed: "enemy02.png")
49
+ mog1.position = i // モグラの位置を指定する
50
+ mog1.zPosition = 1
51
+ mog1.name = "enemy02"
52
+ self.addChild(mog1)// モグラを表示する
53
+ mogArray.append(mog1)
54
+ default:
55
+ let mog2 = SKSpriteNode(imageNamed: "enemy03.png")
56
+ mog2.position = i // モグラの位置を指定する
57
+ mog2.zPosition = 1
58
+ mog2.name = "enemy03"
59
+ self.addChild(mog2)// モグラを表示する
60
+ mogArray.append(mog2)
61
+ }
62
+ }
15
- import UIKit
63
+ popAction()
16
- import SpriteKit
64
+ }
17
65
 
18
- class GameScene: SKScene,SKPhysicsContactDelegate {
19
-
20
- ///モグラの位置
21
- let enemyPoint = [[150,250],[250,600],[200,800],[500,400],[550,150],[650,700],[550,950],[300,1100]]
22
-
23
- ///モグラ配列
66
+ //モグラが穴から出たりったりすアクションをつける】
24
- var enemy01Array:[SKSpriteNode] = []
25
-
26
- override func didMove(to view: SKView) {
27
-
28
- //もぐらの用意
67
+ func popAction(){
29
- for i in 0...7{
68
+ for i in mogArray {
30
-
69
+ i.run(action(pos:i.position), completion: {() -> Void in
70
+ if let index = self.mogArray.firstIndex(of:i ) {
71
+ self.changemogura(at:index)
72
+ }
73
+ })
74
+ }
75
+ }
76
+ //配列もぐらを変更する。 at:Intはもぐらの配列のインデックス
77
+ func changemogura(at:Int){
78
+ let random = Int(arc4random_uniform(3))
79
+ // print("ランダムの数",random)
31
- //穴
80
+ switch random {
81
+ case 0:
32
- let hole = SKSpriteNode(imageNamed:"hole.png")
82
+ let mog = SKSpriteNode(imageNamed: "enemy01.png")
33
- hole.position = CGPoint(x:enemyPoint[i][0],y:enemyPoint[i][1])
83
+ mog.position = mogPoint[at] // モグラの位置を指定する
84
+ mog.zPosition = 1
85
+ mog.name = "enemy01"
34
- self.addChild(hole)
86
+ self.addChild(mog)// モグラを表示する
35
-
36
- //もぐら
87
+ mogArray[at] = mog //配列を入れ替える
88
+ case 1:
37
- let enemy01 = SKSpriteNode(imageNamed: "enemy01.png")
89
+ let mog1 = SKSpriteNode(imageNamed: "enemy02.png")
38
- enemy01.position = CGPoint(x:enemyPoint[i][0],y:enemyPoint[i][1])
90
+ mog1.position = mogPoint[at] // モグラの位置を指定する
91
+ mog1.zPosition = 1
39
- enemy01Array.append(enemy01)
92
+ mog1.name = "enemy02"
40
-
41
- let action1 = SKAction.moveTo(y: -1000,duration:0.0)
93
+ self.addChild(mog1)// モグラを表示する
42
- let action2 = SKAction.wait(forDuration: 0.5,withRange:1.5)
94
+ mogArray[at] = mog1 //配列を入れ替える
43
- let action3 = SKAction.moveTo(y: hole.position.y,duration:0.0)
44
- let action4 = SKAction.wait(forDuration: 0.5,withRange:1.0)
95
+ default:
45
- let actionS = SKAction.sequence([action1,action2,action3,action4])
96
+ let mog2 = SKSpriteNode(imageNamed: "enemy03.png")
46
- let actionR = SKAction.repeatForever(actionS)
97
+ mog2.position = mogPoint[at] // モグラの位置を指定する
47
-
98
+ mog2.zPosition = 1
99
+ mog2.name = "enemy03"
48
- self.addChild(enemy01)
100
+ self.addChild(mog2)// モグラを表示する
49
- enemy01.run(actionR)
101
+ mogArray[at] = mog2
50
102
  }
103
+
104
+ mogArray[at].run(action(pos:mogArray[at].position), completion: {() -> Void in
105
+ if let removeindex = self.mogArray.firstIndex(of:self.mogArray[at] ) {
106
+ self.changemogura(at:removeindex)
107
+ }
108
+ })
109
+ }
110
+
111
+ //もぐらアクション
112
+ func action(pos:CGPoint)->SKAction {
113
+ let action1 = SKAction.moveTo(y: -1000, duration: 0.0)
114
+ let action2 = SKAction.wait(forDuration: 2.0, withRange: 4.0)
115
+ let action3 = SKAction.moveTo(y: pos.y, duration: 0.0)
116
+ let action4 = SKAction.wait(forDuration: 1.0, withRange: 2.0)
117
+ let remove = SKAction.removeFromParent()
118
+ let actionS = SKAction.sequence([action1, action2, action3, action4, remove])
119
+ return SKAction.sequence([actionS])
51
120
  }
121
+
52
-
122
+ // タイマーで実行される処理(1.0秒ごとに繰り返し実行)
53
-
123
+ //@objc func timerUpdate() {
124
+ // }
125
+
126
+ // タッチしたときの処理
54
127
  override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
55
- if let touch:AnyObject = touches.first{
128
+ for touch: AnyObject in touches {
56
- let location = touch.location(in:self)
129
+ let location = touch.location(in: self)
130
+ // タッチした位置にあるものを調べる
57
- let touchNode = self.atPoint(location)//btnSprite.positionを読み取っている
131
+ let touchNode = self.atPoint(location)
58
-
132
+ actionS(touch:touchNode)
133
+ }
134
+ }
135
+
136
+
137
+
138
+
139
+ func actionS(touch:SKNode){
140
+ for i in mogArray { // 配列の要素を繰り返す
141
+ // もし、タッチしたものがモグラだったら、やっつける
142
+ if touch == i { // スコアをアップして、表示する
59
- for i in 0...7{
143
+ switch i.name {
60
-
61
- if touchNode == enemy01Array[i]{
144
+ case "enemy01":
62
-
145
+ print("01")
146
+ case "enemy02":
147
+ print("02")
148
+ case "enemy03":
149
+ print("03")
150
+ default:print("その他")
151
+ }
152
+
63
- let enemy01 = SKSpriteNode(imageNamed:"enemy01")
153
+ let mog = SKSpriteNode(imageNamed: "mog3.png")
154
+ // やられたモグラを作る
64
- enemy01.position = touchNode.position
155
+ mog.position = touch.position
156
+ // 位置を指定する
65
- self.addChild(enemy01)
157
+ self.addChild(mog)
66
-
158
+ // やられたモグラを表示させる
159
+ // 【モグラに回転しながら上に飛び出して消えるアクションをつける】
67
- //モグラを1回転するアクション
160
+ // モグラを回転するアクション
68
- let action1 = SKAction.rotate(byAngle: 6.28, duration: 0.2)
161
+ let action1 = SKAction.rotate(byAngle: 6.28, duration: 0.3)
69
-
70
- //モグラを上に100移動
162
+ // モグラを上に100移動するアクション
71
- let action2 = SKAction.moveTo(y: touchNode.position.y + 150,duration: 0.2)
163
+ let action2 = SKAction.moveTo(y: touch.position.y + 150, duration: 0.3)
164
+ // action1とaction2を同時に行う
72
- let actionG = SKAction.group([action1,action2])
165
+ let actionG = SKAction.group([action1, action2])
166
+ // モグラを削除するアクション
73
- let action3 = SKAction.removeFromParent()
167
+ let action3 = SKAction.removeFromParent()
168
+ // actionGとaction3を順番に行う
74
- let actionS = SKAction.sequence([actionG,action3])
169
+ let actionS = SKAction.sequence([actionG, action3])
170
+ // モグラに「回転しながら上に飛び出して消えるアクション」をつける
75
- enemy01.run(actionS)
171
+ mog.run(actionS)
76
- //モグラを-1000に移動して消す
77
- touchNode.position.y = -1000
172
+ touch.position.y = -1000
78
- }
173
+ // モグラを地下(-1000)に移動して消す
79
174
  }
80
175
  }
81
176
  }
82
-
83
177
  }

1

swiftバージョンを追記

2021/05/07 04:17

投稿

nimoe
nimoe

スコア1

title CHANGED
@@ -1,1 +1,1 @@
1
- もぐらたたきでキャラクターを複数表示したい
1
+ もぐらたたきでキャラクターを複数ランダムに表示したい
body CHANGED
@@ -5,6 +5,7 @@
5
5
  穴の配列に別のもぐらを追加してみたところもぐらが出る穴が固定されてしまうため断念しました。
6
6
  3種類のもぐらを表示、かつ毎度ランダムに穴から表示されるようにしたく、
7
7
  どなたかご教授いただきたく、よろしくお願いいたします。
8
+ バージョンはswift5です。
8
9
 
9
10
  ```
10
11
 
@@ -79,7 +80,4 @@
79
80
  }
80
81
  }
81
82
 
82
- override func update(_ currentTime: TimeInterval) {
83
- // Called before each frame is rendered
84
- }
85
83
  }