質問編集履歴

6

半年後の現状と質問

2018/06/21 11:56

投稿

tanakana
tanakana

スコア150

test CHANGED
File without changes
test CHANGED
@@ -4,17 +4,13 @@
4
4
 
5
5
  http://neight968.hatenablog.com/entry/2015/07/22/040538
6
6
 
7
- 古い記事ですが、ここを参考にswift4で修正してみたのですが、実際の使い方が
8
-
9
- わかりません。
10
-
11
- テキストをどう定義して、どう呼び出したらいいのか
12
-
13
- MessageText.swiftのdrawText()を
14
-
15
- gameclear.swiftで使うにはどうすれば良いでしょうか?
16
-
17
- よろくお願ます。
7
+ この記事を参考にいます。
8
+
9
+ 半年前に一度、削除依頼を出しましたが却下されてしまいました。
10
+
11
+ 現状の報告を含め新しく質問させていただきます。
12
+
13
+ 初心者ですが真摯に取り組んでいますので回答よろしくお願いします。
18
14
 
19
15
  ###発生している問題・エラーメッセージ
20
16
 
@@ -22,442 +18,514 @@
22
18
 
23
19
  ```
24
20
 
21
+ エラーメッセージは出力されませんが、
22
+
23
+ CSendText.swiftの
24
+
25
+ print(label.text)
26
+
27
+ はログに出力されてるようですが、
28
+
29
+ シュミレーターnodesの数字に変化がないので
30
+
25
- Use of unresolved identifier
31
+ GameScen.swiftのm_parentSceneか
32
+
33
+ let gameScene = GameScen()
34
+
35
+ この辺りの指定がうまくいってない様に思います。
36
+
37
+
38
+
39
+
26
40
 
27
41
  ```
28
42
 
29
- ###該当のソースコード
43
+ CSendText.swift
30
44
 
31
45
  ```swift4
32
46
 
33
- 自分なりに修正してみました
47
+
34
-
35
- MessageText.swift
48
+
49
+
36
50
 
37
51
  import SpriteKit
38
52
 
53
+
54
+
39
55
  enum eTextState: Int {
40
56
 
41
- case send = 0 // 通常文字送り
57
+ case send = 0 // 通常文字送り
42
-
58
+
43
- case skip // 文字送りスキップ
59
+ case skip // 文字送りスキップ
44
-
60
+
45
- case remove // 貼付けた文字の取り外し
61
+ case remove // 貼付けた文字の取り外し
46
62
 
47
63
  }
48
64
 
49
65
  /**
50
66
 
51
- * 文字送り用クラス
67
+ * 文字送り用クラス
52
-
68
+
53
- * 現在は横文字表示しか対応していません。
69
+ * 現在は横文字表示しか対応していません。
54
-
70
+
55
- */
71
+ */
56
72
 
57
73
  class CSendText {
58
74
 
59
- // メンバ変数
60
-
61
- // テキストを文字送りするのに必要そうな変数
62
-
63
- var m_text: String? // 表示する文字列
64
-
65
- var m_count: Int = 0 // テキストの文字数取得
66
-
67
- var m_strcount: CGFloat = 0.0 // 現在何文字目表示したか
68
-
69
- var m_delayTime: CGFloat = 0.1 // 一文字毎に描画するのを遅らせる秒数
70
-
71
- var m_nextLineKey: Character = "嬲" // 改行キー
72
-
73
- var m_parentScene: SKScene? // とりつけるシーン
74
-
75
- var m_fontSize: CGFloat = 12.0 // フォントサイズ
76
-
77
- var m_labelArray: Array<SKLabelNode> = [] // 表示しているラベル達
78
-
79
- // 文字の位置決定用変数(後で変換するのが面倒なのでCGCloatで作成)
80
-
81
- var x: UInt = 0 // 横に何文字目か
82
-
83
- var y: UInt = 0 // 何目か
84
-
85
- var maxWidth: UInt = 15 // 横に最大文字表示する
86
-
87
- var m_posX: CGFloat?
88
-
89
- var m_posY: CGFloat?
90
-
91
- var m_color: UIColor = UIColor.black
92
-
93
- var m_drawEndFlag: Bool = false
94
-
95
- var m_state: eTextState = .send {
96
-
97
- willSet{}
98
-
99
- didSet{
100
-
101
- switch m_state {
102
-
103
- case .send:
104
-
105
- self.m_delayTime = 0.1
106
-
107
- case .skip:
108
-
109
- self.skipDraw(text: m_text)
110
-
111
- case .remove:
112
-
113
- self.remove()
114
-
115
- }
116
-
117
- }
118
-
119
- }
120
-
121
- // (文字送りで表示するテキスト、フォントサイズ、初期位置X、初期位置Y、ラベルを取り付けるシーン)
122
-
123
- convenience init(text: String!, fontsize: CGFloat!, posX: CGFloat!, posY: CGFloat!, addView: SKScene!){
124
-
125
- self.init(text: text, fontsize: fontsize, posX: posX, posY: posY,addView: addView,nextLineKey: nil, maxWidth: nil, delayTime: nil, mode: nil, color: nil)
126
-
127
- }
128
-
129
-
130
-
131
- // (文字送りで表示するテキスト、フォントサイズ、初期位置X、初期位置Y、ラベルを取り付けるシーン、文字色)
132
-
133
- convenience init(text: String!, fontsize: CGFloat!, posX: CGFloat!, posY: CGFloat!, addView: SKScene!, color: UIColor!){
134
-
135
- self.init(text: text, fontsize: fontsize, posX: posX, posY: posY,addView: addView,nextLineKey: nil, maxWidth: nil, delayTime: nil, mode: nil, color: color)
136
-
137
- }
138
-
139
- // (文字送りで表示するテキスト、フォントサイズ、初期位置X、初期位置Y、ラベルを取り付けるシーン、横に書ける最大文字数)
140
-
141
- convenience init(text: String!, fontsize: CGFloat!, posX: CGFloat!, posY: CGFloat!, addView: SKScene!, maxWidth: UInt!){
142
-
143
- self.init(text: text, fontsize: fontsize, posX: posX, posY: posY,addView: addView,nextLineKey: nil, maxWidth: maxWidth, delayTime: nil, mode: nil, color: nil)
144
-
145
- }
146
-
147
- // (文字送りで表示するテキスト、フォントサイズ、初期位置X、初期位置Y、ラベルを取り付けるシーン、モード)
148
-
149
- convenience init(text: String!, fontsize: CGFloat!, posX: CGFloat!, posY: CGFloat!, addView: SKScene!, mode: eTextState){
150
-
151
- self.init(text: text, fontsize: fontsize, posX: posX, posY: posY,addView: addView,nextLineKey: nil, maxWidth: nil, delayTime: nil, mode: mode, color: nil)
152
-
153
- }
154
-
155
- // (文字送りで表示するテキスト、フォントサイズ、初期位置X、初期位置Y、ラベルを取り付けるシーン、文字表示の遅さ)
156
-
157
- convenience init(text: String!, fontsize: CGFloat!, posX: CGFloat!, posY: CGFloat!, addView: SKScene!, delayTime: CGFloat!){
158
-
159
- self.init(text: text, fontsize: fontsize, posX: posX, posY: posY,addView: addView,nextLineKey: nil, maxWidth: nil, delayTime: delayTime, mode: nil, color: nil)
160
-
161
- }
162
-
163
-
164
-
165
- init(text: String!, fontsize: CGFloat!, posX: CGFloat!, posY: CGFloat!, addView: SKScene!,
166
-
167
- nextLineKey: Character!, maxWidth: UInt!, delayTime: CGFloat!, mode: eTextState!, color: UIColor!){
168
-
169
- if (nextLineKey != nil) { m_nextLineKey = nextLineKey }
170
-
171
- if (maxWidth != nil) { self.maxWidth = maxWidth }
172
-
173
- if (delayTime != nil) { self.m_delayTime = delayTime }
174
-
175
- if (mode != nil) { self.m_state = mode }
176
-
177
- if (fontsize != nil) { self.m_fontSize = fontsize }
178
-
179
- if (color != nil) { self.m_color = color }
180
-
181
- self.m_posX = posX
182
-
183
- self.m_posY = posY
184
-
185
- self.m_parentScene = addView
186
-
187
- drawText(text: text)
188
-
189
- }
190
-
191
-
192
-
193
- required init?(coder aDecoder: NSCoder){
194
-
195
- fatalError("init(coder:) has not been implemented")
196
-
197
- }
198
-
199
- /// テキストの描画
200
-
201
- private func drawText(text: String!){
202
-
203
- // テキストの保管と文字数の取得
204
-
205
- var text: String = text
206
-
207
- m_text = text
208
-
209
- m_count = text.utf16.count
210
-
211
- if m_count == 0 { return } // 空なら描画せず終了
212
-
213
- for _ in 1 ... m_count {
214
-
215
- if m_state == .remove { return } // 表示途中で文字を消して、といった処理が来た時用フラグと処理
216
-
217
- let chara:Character = text.remove(at: text.startIndex) // 一文字目をテキストから削除
218
-
219
- if chara == m_nextLineKey { // 嬲 は改行用のキー文時
220
-
221
- _ = y + 1 // 行目をプラス
222
-
223
- x = 0 // 行が変わるので、横らしを初期化
224
-
225
- } else if x > maxWidth { // 改行用の処理
226
-
227
- _ = y + 1 // 行目をプラス
228
-
229
- x = 0 // 同上
230
-
231
- } else if m_posX! + (m_fontSize * CGFloat(x)) + m_fontSize/2.0 > (m_parentScene?.frame.width)! { // 画面外にいかないように
232
-
233
- _ = y + 1 // 目をプラ
234
-
235
- x = 0 // 同上
236
-
237
- }
238
-
239
- _ = x + 1
240
-
241
- // ラベルノード生成
242
-
243
- let label: SKLabelNode = SKLabelNode(text: "(chara)")
244
-
245
- label.fontSize = m_fontSize // フォントサイズ指定
246
-
247
- label.position = CGPoint(x: m_posX! + (CGFloat(x-1) * m_fontSize), y: m_posY! - (CGFloat(y) * m_fontSize)) // 文字の位置設定
248
-
249
- label.alpha = 0.0 // 透明度の設定(初期は透明ので0.0)
250
-
251
- label.fontColor = m_color // 文字色指定
252
-
253
- m_parentScene?.addChild(label) // ラベルの取り付け
254
-
255
- m_labelArray.append(label) // ラベルの配列に登録
256
-
257
- // 表示する時間をずらすためのアクションの設定
258
-
259
- let delay = SKAction.wait(forDuration: TimeInterval(m_delayTime * m_strcount)) // 基本送らせる時間に文字数を掛けることでずれを大きくする
260
-
261
- let fadein = SKAction.fadeAlpha(by: 1.0, duration: 0.5) // 不透明にするアクションの生成
262
-
263
- let seq = SKAction.sequence([delay, fadein]) // 上記2つのアクショを連結
264
-
265
- label.run(seq) // 実行
266
-
267
- m_strcount += 1.0 // 現在文字数をプラス
268
-
269
- }
270
-
271
- y = 0
272
-
273
- x = 0
274
-
275
- m_strcount = 0.0
276
-
277
- }
278
-
279
-
280
-
281
- func skipDraw(text: String!){ //スキップモードの文字の描画
282
-
283
- if m_drawEndFlag { return }
284
-
285
- self.remove()
286
-
287
- var text: String = text // テキスト保管と文字数の取得
288
-
289
- m_count = text.utf16.count
290
-
291
- if m_count == 0 { return } // 空なら描画せず終了
292
-
293
- for _ in 1 ... m_count {
294
-
295
- if m_state == .remove { return } // 表示途中で文字を消して、といった処理が来た時用のフラグと処理
296
-
297
- let chara:Character = text.remove(at: text.startIndex) // 文字テキトから削除
298
-
299
- if chara == m_nextLineKey { // 嬲 は改行用のキー文時
300
-
301
- _ = y + 1 // 行目をプラス
302
-
303
- x = 0
304
-
305
- } else if x > maxWidth { // 改行用の処理
306
-
307
- _ = y + 1 // 行目をプラス
308
-
309
- x = 0 // 行が変わるので、横にずらす距離を初期化
310
-
311
- } else if m_posX! + (m_fontSize * CGFloat(x)) + m_fontSize/2.0 > (m_parentScene?.frame.width)! {
312
-
313
- _ = y + 1 // 行目をプラス
314
-
315
- x = 0
316
-
317
- }
318
-
319
- _ = x + 1 // ラベルノードの生成
320
-
321
- let label: SKLabelNode = SKLabelNode(text: "(chara)") // "(chara)"とすることでStringに変換
322
-
323
- label.fontSize = m_fontSize // フォンサイズ指定
324
-
325
- // 文字の位置設定
326
-
327
- label.position = CGPoint(x: m_posX! + (CGFloat(x-1) * m_fontSize), y: m_posY! - (CGFloat(y) * m_fontSize))
328
-
329
- // 透明度の設定(スキップの場合、最初から不透明)
330
-
331
- label.fontColor = m_color // ラベルの取り付け
332
-
333
- m_parentScene?.addChild(label)
334
-
335
- m_labelArray.append(label)
336
-
337
- m_strcount += 1.0
338
-
339
- }
340
-
341
- y = 0 // 縦ずし初期化
342
-
343
- x = 0 // 横ずらし初期化
344
-
345
- m_strcount = 0.0 // 描画した字数の初期化
346
-
347
- }
348
-
349
-
350
-
351
- /// 文字が全て表示されたか確認
352
-
353
- func checkDrawEnd(){
354
-
355
- if m_labelArray.last?.alpha == 1.0 {
356
-
357
- m_drawEndFlag = true
358
-
359
- }
360
-
361
- }
362
-
363
-
364
-
365
- /// 描画モードの切り替え
366
-
367
- func changeState( mode: eTextState ){
368
-
369
- self.m_state = mode
370
-
371
- }
372
-
373
-
374
-
375
- /// 描画の基本設はそのままに、違う文へ切り替え
376
-
377
- func changeText(text: String!){
378
-
379
- if m_drawEndFlag {
380
-
381
- self.remove()
382
-
383
- self.changeState( mode: .send )
384
-
385
- drawText(text: text)
386
-
387
- } else {
388
-
389
- self.changeState( mode: .skip )
390
-
391
- }
392
-
393
- }
394
-
395
- // ラベルの取り外し
396
-
397
- func remove(){
398
-
399
- while m_labelArray.count > 0 {
400
-
401
- m_labelArray.last?.removeFromParent()
402
-
403
- m_labelArray.removeLast()
404
-
405
- m_drawEndFlag = false
406
-
407
- }
408
-
409
- }
75
+ // メンバ変数
76
+
77
+ // テキストを文字送りするのに必要そうな変数
78
+
79
+ var m_text: String? // 表示する文字列
80
+
81
+ var m_count: Int = 0 // テキストの文字数取得
82
+
83
+ var m_strcount: CGFloat = 0.0 // 現在何文字目表示したか
84
+
85
+ var m_delayTime: CGFloat = 1.1 // 一文字毎に描画するのを遅らせる秒数
86
+
87
+ var m_nextLineKey: Character = "嬲" // 改行キー
88
+
89
+ var m_parentScene: SKScene? // とりつけるシーン
90
+
91
+ var m_fontSize: CGFloat = 12.0 // フォントサイズ
92
+
93
+ var m_labelArray: Array<SKLabelNode> = [] // 表示しているラベル達
94
+
95
+
96
+
97
+ // 文字の位置決定用変数(後で変換するのが面倒なのでCGCloatで作成)
98
+
99
+ var x: UInt = 0 // 横に文字目か
100
+
101
+ var y: UInt = 0 // 何行目
102
+
103
+ var maxWidth: UInt = 15 // 横に最大何文字表示するか
104
+
105
+ var m_posX: CGFloat?
106
+
107
+ var m_posY: CGFloat?
108
+
109
+ var m_color: UIColor = UIColor.black
110
+
111
+ var m_drawEndFlag: Bool = false
112
+
113
+ var m_state: eTextState = .send {
114
+
115
+ willSet{}
116
+
117
+ didSet{
118
+
119
+ switch m_state {
120
+
121
+ case .send:
122
+
123
+ self.m_delayTime = 0.1
124
+
125
+ case .skip:
126
+
127
+ self.skipDraw(text: m_text)
128
+
129
+ case .remove:
130
+
131
+ self.remove()
132
+
133
+ }
134
+
135
+ }
136
+
137
+ }
138
+
139
+ // (文字送りで表示するテキスト、フォントサイズ、初期位置X、初期位置Y、ラベルを取り付けるシーン)
140
+
141
+ convenience init(text: String!, fontsize: CGFloat!, posX: CGFloat!, posY: CGFloat!, addView: SKScene!){
142
+
143
+ self.init(text: text, fontsize: fontsize, posX: posX, posY: posY,addView: addView,nextLineKey: nil, maxWidth: nil, delayTime: nil, mode: nil, color: nil)
144
+
145
+ }
146
+
147
+ // (文字送りで表示するテキスト、フォントサイズ、初期位置X、初期位置Y、ラベルを取り付けるシーン、文字色)
148
+
149
+ convenience init(text: String!, fontsize: CGFloat!, posX: CGFloat!, posY: CGFloat!, addView: SKScene!, color: UIColor!){
150
+
151
+ self.init(text: text, fontsize: fontsize, posX: posX, posY: posY,addView: addView,nextLineKey: nil, maxWidth: nil, delayTime: nil, mode: nil, color: color)
152
+
153
+ }
154
+
155
+ // (文字送りで表示するテキスト、フォントサイズ、初期位置X、初期位置Y、ラベルを取り付けるシーン、横に書ける最大文字数)
156
+
157
+ convenience init(text: String!, fontsize: CGFloat!, posX: CGFloat!, posY: CGFloat!, addView: SKScene!, maxWidth: UInt!){
158
+
159
+ self.init(text: text, fontsize: fontsize, posX: posX, posY: posY,addView: addView,nextLineKey: nil, maxWidth: maxWidth, delayTime: nil, mode: nil, color: nil)
160
+
161
+ }
162
+
163
+ // (文字送りで表示するテキスト、フォントサイズ、初期位置X、初期位置Y、ラベルを取り付けるシーン、モード)
164
+
165
+ convenience init(text: String!, fontsize: CGFloat!, posX: CGFloat!, posY: CGFloat!, addView: SKScene!, mode: eTextState){
166
+
167
+ self.init(text: text, fontsize: fontsize, posX: posX, posY: posY,addView: addView,nextLineKey: nil, maxWidth: nil, delayTime: nil, mode: mode, color: nil)
168
+
169
+ }
170
+
171
+ // (文字送りで表示するテキスト、フォントサイズ、初期位置X、初期位置Y、ラベルを取り付けるシーン、文字表示の遅さ)
172
+
173
+ convenience init(text: String!, fontsize: CGFloat!, posX: CGFloat!, posY: CGFloat!, addView: SKScene!, delayTime: CGFloat!){
174
+
175
+ self.init(text: text, fontsize: fontsize, posX: posX, posY: posY,addView: addView,nextLineKey: nil, maxWidth: nil, delayTime: delayTime, mode: nil, color: nil)
176
+
177
+ }
178
+
179
+
180
+
181
+ init(text: String!, fontsize: CGFloat!, posX: CGFloat!, posY: CGFloat!, addView: SKScene!,
182
+
183
+ nextLineKey: Character!, maxWidth: UInt!, delayTime: CGFloat!, mode: eTextState!, color: UIColor!){
184
+
185
+
186
+
187
+ if (nextLineKey != nil) { m_nextLineKey = nextLineKey }
188
+
189
+ if (maxWidth != nil) { self.maxWidth = maxWidth }
190
+
191
+ if (delayTime != nil) { self.m_delayTime = delayTime }
192
+
193
+ if (mode != nil) { self.m_state = mode }
194
+
195
+ if (fontsize != nil) { self.m_fontSize = fontsize }
196
+
197
+ if (color != nil) { self.m_color = color }
198
+
199
+
200
+
201
+ self.m_posX = posX
202
+
203
+ self.m_posY = posY
204
+
205
+ self.m_parentScene = addView
206
+
207
+
208
+
209
+ drawText(text: text)
210
+
211
+
212
+
213
+ }
214
+
215
+
216
+
217
+ required init?(coder aDecoder: NSCoder){
218
+
219
+ fatalError("init(coder:) has not been implemented")
220
+
221
+ }
222
+
223
+
224
+
225
+
226
+
227
+ /// テキストの描画
228
+
229
+ func drawText(text: String!){
230
+
231
+ // テキストの保管と文字取得
232
+
233
+ var text: String = text
234
+
235
+ m_text = text
236
+
237
+ m_count = text.count
238
+
239
+ if m_count == 0 { return } // 空なら描画せ終了
240
+
241
+
242
+
243
+ for _ in 1 ... m_count {
244
+
245
+ if m_state == .remove { return } // 表示途中で文字を消して、といった処理が来た時用のフラグと処理
246
+
247
+
248
+
249
+ let chara:Character = text.remove(at: text.startIndex) // 一文字目をテキトから削除
250
+
251
+
252
+
253
+ if chara == m_nextLineKey { // 嬲 は改行用のキー文時
254
+
255
+ y = y + 1 // 行目をプラス
256
+
257
+ x = 0 // 行が変わるで、横ずらしを初期化
258
+
259
+ } else if x > maxWidth { // 改行用の処理
260
+
261
+ y = y + 1 // 行目をプラス
262
+
263
+ x = 0 // 同上
264
+
265
+ } else if m_posX! + m_fontSize * CGFloat(x) + m_fontSize/2.0 > (m_parentScene?.frame.width)! { // 画面外にいかいように
266
+
267
+
268
+
269
+ y = y + 1 // 行目をプ
270
+
271
+ x = 0 // 同上
272
+
273
+ }
274
+
275
+ x = x + 1 // ラベルノード生成
276
+
277
+ let label: SKLabelNode = SKLabelNode(text: "(chara)")
278
+
279
+ label.fontSize = m_fontSize // フォトサイズ指定
280
+
281
+ label.position = CGPoint(x: m_posX! + (CGFloat(x-1) * m_fontSize), y: m_posY! - (CGFloat(y) * m_fontSize)) // 文字の位置設定
282
+
283
+ label.alpha = 0.0 // 透明度設定(初期は透明なので0.0)
284
+
285
+ label.fontColor = m_color // 文字色指定
286
+
287
+ print(label.text)
288
+
289
+ // ラベルの取り付け
290
+
291
+ m_parentScene?.addChild(label)
292
+
293
+ // ラベルの配列に登録
294
+
295
+ m_labelArray.append(label)
296
+
297
+
298
+
299
+ // 表示する時間をずらすためのアクションの設定
300
+
301
+ let delay = SKAction.wait(forDuration: TimeInterval(m_delayTime * m_strcount)) // 基本の送らせる時間に文字数を掛けることでずれを大きくする
302
+
303
+ let fadein = SKAction.fadeAlpha(by: 1.0, duration: 0.5) // 不透明にするアクション生成
304
+
305
+ let seq = SKAction.sequence([delay, fadein]) // 上記2つのアクションを連結
306
+
307
+ label.run(seq) // 実行
308
+
309
+
310
+
311
+
312
+
313
+ m_strcount += 1.0 // 現在の文字プラ
314
+
315
+ }
316
+
317
+ y = 0
318
+
319
+ x = 0
320
+
321
+ m_strcount = 0.0
322
+
323
+ }
324
+
325
+
326
+
327
+ /// スキップモードの文字の描画
328
+
329
+ func skipDraw(text: String!){
330
+
331
+ if m_drawEndFlag { return }
332
+
333
+
334
+
335
+ self.remove()
336
+
337
+
338
+
339
+ // テキスの保管と文字数の取得
340
+
341
+ var text: String = text
342
+
343
+
344
+
345
+ m_count = text.count
346
+
347
+ if m_count == 0 { return } // 空なら描画せず終了
348
+
349
+
350
+
351
+ for _ in 1 ... m_count {
352
+
353
+ if m_state == .remove { return } // 表示途中で文字を消して、といった処理が来た時用のフラグと処理
354
+
355
+
356
+
357
+ let chara:Character = text.remove(at: text.startIndex) // 一文字目をテキストか削除
358
+
359
+
360
+
361
+ if chara == m_nextLineKey { // 嬲 は改行用のキー
362
+
363
+ y = y + 1 // 行目をプラス
364
+
365
+ x = 0
366
+
367
+ } else if x > maxWidth { // 改行用処理
368
+
369
+ y = y + 1 // 行目をプラス
370
+
371
+ x = 0 // 行が変わるので、横にずらす距離を初期化
372
+
373
+ } else if m_posX! + (m_fontSize * CGFloat(x)) + m_fontSize/2.0 > (m_parentScene?.frame.width)! {
374
+
375
+ y = y + 1 // 行目をプラス
376
+
377
+ print(y)
378
+
379
+ x = 0
380
+
381
+ }
382
+
383
+ x = x + 1
384
+
385
+
386
+
387
+ // ラベルノードの生成
388
+
389
+ let label: SKLabelNode = SKLabelNode(text: "(chara)") // "(chara)"とすることでStringに変換
390
+
391
+ // フォントサイズ指
392
+
393
+ label.fontSize = m_fontSize
394
+
395
+ // 文字の位置設定
396
+
397
+ label.position = CGPoint(x: m_posX! + (CGFloat(x-1) * m_fontSize), y: m_posY! - (CGFloat(y) * m_fontSize))
398
+
399
+ // 透明度の設定(スキップの場合、最初から不透明)
400
+
401
+ label.fontColor = m_color
402
+
403
+
404
+
405
+ // ラベルの取り付け
406
+
407
+ m_parentScene?.addChild(label)
408
+
409
+
410
+
411
+ m_labelArray.append(label)
412
+
413
+
414
+
415
+ m_strcount += 1.0
416
+
417
+ }
418
+
419
+ y = 0 // 縦ずらし初期化
420
+
421
+ x = 0 // 横ずらし初期化
422
+
423
+ m_strcount = 0.0 // 描画した文字数の初期化
424
+
425
+ }
426
+
427
+
428
+
429
+
430
+
431
+ /// 文字が全て表示されたかの確認
432
+
433
+ func checkDrawEnd(){
434
+
435
+ if m_labelArray.last?.alpha == 1.0 {
436
+
437
+ m_drawEndFlag = true
438
+
439
+ }
440
+
441
+ }
442
+
443
+
444
+
445
+ /// 描画モードの切り替え
446
+
447
+ func changeState( mode: eTextState ){
448
+
449
+ self.m_state = mode
450
+
451
+ }
452
+
453
+
454
+
455
+ /// 描画の基本設定はそのままに、違う文へ切り替え
456
+
457
+ func changeText(text: String!){
458
+
459
+ if m_drawEndFlag {
460
+
461
+ self.remove()
462
+
463
+ self.changeState(mode: .send)
464
+
465
+ drawText(text: text)
466
+
467
+ } else {
468
+
469
+ self.changeState(mode: .skip)
470
+
471
+ }
472
+
473
+ }
474
+
475
+
476
+
477
+ /// ラベルの取り外し
478
+
479
+ func remove(){
480
+
481
+ while m_labelArray.count > 0 {
482
+
483
+ m_labelArray.last?.removeFromParent()
484
+
485
+ m_labelArray.removeLast()
486
+
487
+ m_drawEndFlag = false
488
+
489
+ }
490
+
491
+ }
410
492
 
411
493
  }
412
494
 
495
+
496
+
413
497
  ```
414
498
 
415
- gameclear.swift
499
+ gamescene.swift
416
500
 
417
501
  ```
418
502
 
419
503
  import SpriteKit
420
504
 
421
- class GameClear: SKScene {
422
-
423
- override func didMove(to view: SKView) {
424
-
425
- let LabelText = SKLabelNode(fontNamed: "Chalkduster")
426
-
427
- LabelText.text = "ゲームクリア!"
428
-
429
- let myBoundSize: CGSize = UIScreen.main.bounds.size
430
-
431
- let titlefont = Int(CGFloat(myBoundSize.width/9))
432
-
433
- LabelText.fontSize = CGFloat(titlefont)
434
-
435
- LabelText.position = CGPoint(x:self.frame.midX, y:self.frame.height / 2+200)
436
-
437
- self.addChild(LabelText)
438
-
439
- //表示したい文字
440
-
441
- drawText(text: "表示したい文字")
442
-
443
- //
444
-
445
- }
446
-
447
-
448
-
449
- override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
450
-
451
- if let _ = touches.first as UITouch? {
452
-
453
-
454
-
455
- }
456
-
457
- }
458
-
459
- }
505
+
506
+
507
+ class GameScene: SKScene {
508
+
509
+
510
+
511
+ override func didMove(to view: SKView) {
512
+
513
+ self.backgroundColor = UIColor.gray
514
+
515
+ let gameScene = GameScene()
516
+
517
+ //let gameScene = GameScene(size: view.bounds.size)
518
+
519
+ let csvtext = "こんにちは"
520
+
521
+ let test = CSendText(text: csvtext, fontsize: 20, posX: frame.size.width/2, posY: frame.size.height/2, addView: gameScene,nextLineKey: nil, maxWidth: 736, delayTime: 1, mode: nil, color: UIColor.black)
522
+
523
+ test.drawText(text: csvtext)
524
+
525
+ }
526
+
527
+ }
528
+
529
+
460
530
 
461
531
  ```
462
-
463
- drawText(text: "文字")

5

質問削除の取り消し

2018/06/21 11:56

投稿

tanakana
tanakana

スコア150

test CHANGED
@@ -1 +1 @@
1
- おなじ質問があったの取り消したい。
1
+ SpriteKitゲーム中に文章を表示したい。
test CHANGED
@@ -1,3 +1,463 @@
1
+ ###前提・実現したいこと
2
+
1
- 同じ質問があったの取り消ます
3
+ SpriteKitゲーム中に文章を表示たい
4
+
2
-
5
+ http://neight968.hatenablog.com/entry/2015/07/22/040538
6
+
7
+ 古い記事ですが、ここを参考にswift4で修正してみたのですが、実際の使い方が
8
+
9
+ わかりません。
10
+
11
+ テキストをどう定義して、どう呼び出したらいいのか
12
+
13
+ MessageText.swiftのdrawText()を
14
+
15
+ gameclear.swiftで使うにはどうすれば良いでしょうか?
16
+
3
- 削除依頼を出しました
17
+ よろくお願いし
18
+
19
+ ###発生している問題・エラーメッセージ
20
+
21
+ エラーメッセージ
22
+
23
+ ```
24
+
25
+ Use of unresolved identifier
26
+
27
+ ```
28
+
29
+ ###該当のソースコード
30
+
31
+ ```swift4
32
+
33
+ 自分なりに修正してみました
34
+
35
+ MessageText.swift
36
+
37
+ import SpriteKit
38
+
39
+ enum eTextState: Int {
40
+
41
+ case send = 0 // 通常文字送り
42
+
43
+ case skip // 文字送りスキップ
44
+
45
+ case remove // 貼付けた文字の取り外し
46
+
47
+ }
48
+
49
+ /**
50
+
51
+ * 文字送り用クラス
52
+
53
+ * 現在は横文字表示しか対応していません。
54
+
55
+ */
56
+
57
+ class CSendText {
58
+
59
+ // メンバ変数
60
+
61
+ // テキストを文字送りするのに必要そうな変数
62
+
63
+ var m_text: String? // 表示する文字列
64
+
65
+ var m_count: Int = 0 // テキストの文字数取得
66
+
67
+ var m_strcount: CGFloat = 0.0 // 現在何文字目表示したか
68
+
69
+ var m_delayTime: CGFloat = 0.1 // 一文字毎に描画するのを遅らせる秒数
70
+
71
+ var m_nextLineKey: Character = "嬲" // 改行キー
72
+
73
+ var m_parentScene: SKScene? // とりつけるシーン
74
+
75
+ var m_fontSize: CGFloat = 12.0 // フォントサイズ
76
+
77
+ var m_labelArray: Array<SKLabelNode> = [] // 表示しているラベル達
78
+
79
+ // 文字の位置決定用変数(後で変換するのが面倒なのでCGCloatで作成)
80
+
81
+ var x: UInt = 0 // 横に何文字目か
82
+
83
+ var y: UInt = 0 // 何行目か
84
+
85
+ var maxWidth: UInt = 15 // 横に最大何文字表示するか
86
+
87
+ var m_posX: CGFloat?
88
+
89
+ var m_posY: CGFloat?
90
+
91
+ var m_color: UIColor = UIColor.black
92
+
93
+ var m_drawEndFlag: Bool = false
94
+
95
+ var m_state: eTextState = .send {
96
+
97
+ willSet{}
98
+
99
+ didSet{
100
+
101
+ switch m_state {
102
+
103
+ case .send:
104
+
105
+ self.m_delayTime = 0.1
106
+
107
+ case .skip:
108
+
109
+ self.skipDraw(text: m_text)
110
+
111
+ case .remove:
112
+
113
+ self.remove()
114
+
115
+ }
116
+
117
+ }
118
+
119
+ }
120
+
121
+ // (文字送りで表示するテキスト、フォントサイズ、初期位置X、初期位置Y、ラベルを取り付けるシーン)
122
+
123
+ convenience init(text: String!, fontsize: CGFloat!, posX: CGFloat!, posY: CGFloat!, addView: SKScene!){
124
+
125
+ self.init(text: text, fontsize: fontsize, posX: posX, posY: posY,addView: addView,nextLineKey: nil, maxWidth: nil, delayTime: nil, mode: nil, color: nil)
126
+
127
+ }
128
+
129
+
130
+
131
+ // (文字送りで表示するテキスト、フォントサイズ、初期位置X、初期位置Y、ラベルを取り付けるシーン、文字色)
132
+
133
+ convenience init(text: String!, fontsize: CGFloat!, posX: CGFloat!, posY: CGFloat!, addView: SKScene!, color: UIColor!){
134
+
135
+ self.init(text: text, fontsize: fontsize, posX: posX, posY: posY,addView: addView,nextLineKey: nil, maxWidth: nil, delayTime: nil, mode: nil, color: color)
136
+
137
+ }
138
+
139
+ // (文字送りで表示するテキスト、フォントサイズ、初期位置X、初期位置Y、ラベルを取り付けるシーン、横に書ける最大文字数)
140
+
141
+ convenience init(text: String!, fontsize: CGFloat!, posX: CGFloat!, posY: CGFloat!, addView: SKScene!, maxWidth: UInt!){
142
+
143
+ self.init(text: text, fontsize: fontsize, posX: posX, posY: posY,addView: addView,nextLineKey: nil, maxWidth: maxWidth, delayTime: nil, mode: nil, color: nil)
144
+
145
+ }
146
+
147
+ // (文字送りで表示するテキスト、フォントサイズ、初期位置X、初期位置Y、ラベルを取り付けるシーン、モード)
148
+
149
+ convenience init(text: String!, fontsize: CGFloat!, posX: CGFloat!, posY: CGFloat!, addView: SKScene!, mode: eTextState){
150
+
151
+ self.init(text: text, fontsize: fontsize, posX: posX, posY: posY,addView: addView,nextLineKey: nil, maxWidth: nil, delayTime: nil, mode: mode, color: nil)
152
+
153
+ }
154
+
155
+ // (文字送りで表示するテキスト、フォントサイズ、初期位置X、初期位置Y、ラベルを取り付けるシーン、文字表示の遅さ)
156
+
157
+ convenience init(text: String!, fontsize: CGFloat!, posX: CGFloat!, posY: CGFloat!, addView: SKScene!, delayTime: CGFloat!){
158
+
159
+ self.init(text: text, fontsize: fontsize, posX: posX, posY: posY,addView: addView,nextLineKey: nil, maxWidth: nil, delayTime: delayTime, mode: nil, color: nil)
160
+
161
+ }
162
+
163
+
164
+
165
+ init(text: String!, fontsize: CGFloat!, posX: CGFloat!, posY: CGFloat!, addView: SKScene!,
166
+
167
+ nextLineKey: Character!, maxWidth: UInt!, delayTime: CGFloat!, mode: eTextState!, color: UIColor!){
168
+
169
+ if (nextLineKey != nil) { m_nextLineKey = nextLineKey }
170
+
171
+ if (maxWidth != nil) { self.maxWidth = maxWidth }
172
+
173
+ if (delayTime != nil) { self.m_delayTime = delayTime }
174
+
175
+ if (mode != nil) { self.m_state = mode }
176
+
177
+ if (fontsize != nil) { self.m_fontSize = fontsize }
178
+
179
+ if (color != nil) { self.m_color = color }
180
+
181
+ self.m_posX = posX
182
+
183
+ self.m_posY = posY
184
+
185
+ self.m_parentScene = addView
186
+
187
+ drawText(text: text)
188
+
189
+ }
190
+
191
+
192
+
193
+ required init?(coder aDecoder: NSCoder){
194
+
195
+ fatalError("init(coder:) has not been implemented")
196
+
197
+ }
198
+
199
+ /// テキストの描画
200
+
201
+ private func drawText(text: String!){
202
+
203
+ // テキストの保管と文字数の取得
204
+
205
+ var text: String = text
206
+
207
+ m_text = text
208
+
209
+ m_count = text.utf16.count
210
+
211
+ if m_count == 0 { return } // 空なら描画せず終了
212
+
213
+ for _ in 1 ... m_count {
214
+
215
+ if m_state == .remove { return } // 表示途中で文字を消して、といった処理が来た時用のフラグと処理
216
+
217
+ let chara:Character = text.remove(at: text.startIndex) // 一文字目をテキストから削除
218
+
219
+ if chara == m_nextLineKey { // 嬲 は改行用のキー文時
220
+
221
+ _ = y + 1 // 行目をプラス
222
+
223
+ x = 0 // 行が変わるので、横ずらしを初期化
224
+
225
+ } else if x > maxWidth { // 改行用の処理
226
+
227
+ _ = y + 1 // 行目をプラス
228
+
229
+ x = 0 // 同上
230
+
231
+ } else if m_posX! + (m_fontSize * CGFloat(x)) + m_fontSize/2.0 > (m_parentScene?.frame.width)! { // 画面外にいかないように
232
+
233
+ _ = y + 1 // 行目をプラス
234
+
235
+ x = 0 // 同上
236
+
237
+ }
238
+
239
+ _ = x + 1
240
+
241
+ // ラベルノードの生成
242
+
243
+ let label: SKLabelNode = SKLabelNode(text: "(chara)")
244
+
245
+ label.fontSize = m_fontSize // フォントサイズ指定
246
+
247
+ label.position = CGPoint(x: m_posX! + (CGFloat(x-1) * m_fontSize), y: m_posY! - (CGFloat(y) * m_fontSize)) // 文字の位置設定
248
+
249
+ label.alpha = 0.0 // 透明度の設定(初期は透明なので0.0)
250
+
251
+ label.fontColor = m_color // 文字色指定
252
+
253
+ m_parentScene?.addChild(label) // ラベルの取り付け
254
+
255
+ m_labelArray.append(label) // ラベルの配列に登録
256
+
257
+ // 表示する時間をずらすためのアクションの設定
258
+
259
+ let delay = SKAction.wait(forDuration: TimeInterval(m_delayTime * m_strcount)) // 基本の送らせる時間に文字数を掛けることでずれを大きくする
260
+
261
+ let fadein = SKAction.fadeAlpha(by: 1.0, duration: 0.5) // 不透明にするアクションの生成
262
+
263
+ let seq = SKAction.sequence([delay, fadein]) // 上記2つのアクションを連結
264
+
265
+ label.run(seq) // 実行
266
+
267
+ m_strcount += 1.0 // 現在の文字数をプラス
268
+
269
+ }
270
+
271
+ y = 0
272
+
273
+ x = 0
274
+
275
+ m_strcount = 0.0
276
+
277
+ }
278
+
279
+
280
+
281
+ func skipDraw(text: String!){ //スキップモードの文字の描画
282
+
283
+ if m_drawEndFlag { return }
284
+
285
+ self.remove()
286
+
287
+ var text: String = text // テキストの保管と文字数の取得
288
+
289
+ m_count = text.utf16.count
290
+
291
+ if m_count == 0 { return } // 空なら描画せず終了
292
+
293
+ for _ in 1 ... m_count {
294
+
295
+ if m_state == .remove { return } // 表示途中で文字を消して、といった処理が来た時用のフラグと処理
296
+
297
+ let chara:Character = text.remove(at: text.startIndex) // 一文字目をテキストから削除
298
+
299
+ if chara == m_nextLineKey { // 嬲 は改行用のキー文時
300
+
301
+ _ = y + 1 // 行目をプラス
302
+
303
+ x = 0
304
+
305
+ } else if x > maxWidth { // 改行用の処理
306
+
307
+ _ = y + 1 // 行目をプラス
308
+
309
+ x = 0 // 行が変わるので、横にずらす距離を初期化
310
+
311
+ } else if m_posX! + (m_fontSize * CGFloat(x)) + m_fontSize/2.0 > (m_parentScene?.frame.width)! {
312
+
313
+ _ = y + 1 // 行目をプラス
314
+
315
+ x = 0
316
+
317
+ }
318
+
319
+ _ = x + 1 // ラベルノードの生成
320
+
321
+ let label: SKLabelNode = SKLabelNode(text: "(chara)") // "(chara)"とすることでStringに変換
322
+
323
+ label.fontSize = m_fontSize // フォントサイズ指定
324
+
325
+ // 文字の位置設定
326
+
327
+ label.position = CGPoint(x: m_posX! + (CGFloat(x-1) * m_fontSize), y: m_posY! - (CGFloat(y) * m_fontSize))
328
+
329
+ // 透明度の設定(スキップの場合、最初から不透明)
330
+
331
+ label.fontColor = m_color // ラベルの取り付け
332
+
333
+ m_parentScene?.addChild(label)
334
+
335
+ m_labelArray.append(label)
336
+
337
+ m_strcount += 1.0
338
+
339
+ }
340
+
341
+ y = 0 // 縦ずらし初期化
342
+
343
+ x = 0 // 横ずらし初期化
344
+
345
+ m_strcount = 0.0 // 描画した文字数の初期化
346
+
347
+ }
348
+
349
+
350
+
351
+ /// 文字が全て表示されたかの確認
352
+
353
+ func checkDrawEnd(){
354
+
355
+ if m_labelArray.last?.alpha == 1.0 {
356
+
357
+ m_drawEndFlag = true
358
+
359
+ }
360
+
361
+ }
362
+
363
+
364
+
365
+ /// 描画モードの切り替え
366
+
367
+ func changeState( mode: eTextState ){
368
+
369
+ self.m_state = mode
370
+
371
+ }
372
+
373
+
374
+
375
+ /// 描画の基本設定はそのままに、違う文へ切り替え
376
+
377
+ func changeText(text: String!){
378
+
379
+ if m_drawEndFlag {
380
+
381
+ self.remove()
382
+
383
+ self.changeState( mode: .send )
384
+
385
+ drawText(text: text)
386
+
387
+ } else {
388
+
389
+ self.changeState( mode: .skip )
390
+
391
+ }
392
+
393
+ }
394
+
395
+ // ラベルの取り外し
396
+
397
+ func remove(){
398
+
399
+ while m_labelArray.count > 0 {
400
+
401
+ m_labelArray.last?.removeFromParent()
402
+
403
+ m_labelArray.removeLast()
404
+
405
+ m_drawEndFlag = false
406
+
407
+ }
408
+
409
+ }
410
+
411
+ }
412
+
413
+ ```
414
+
415
+ gameclear.swift
416
+
417
+ ```
418
+
419
+ import SpriteKit
420
+
421
+ class GameClear: SKScene {
422
+
423
+ override func didMove(to view: SKView) {
424
+
425
+ let LabelText = SKLabelNode(fontNamed: "Chalkduster")
426
+
427
+ LabelText.text = "ゲームクリア!"
428
+
429
+ let myBoundSize: CGSize = UIScreen.main.bounds.size
430
+
431
+ let titlefont = Int(CGFloat(myBoundSize.width/9))
432
+
433
+ LabelText.fontSize = CGFloat(titlefont)
434
+
435
+ LabelText.position = CGPoint(x:self.frame.midX, y:self.frame.height / 2+200)
436
+
437
+ self.addChild(LabelText)
438
+
439
+ //表示したい文字
440
+
441
+ drawText(text: "表示したい文字")
442
+
443
+ //
444
+
445
+ }
446
+
447
+
448
+
449
+ override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
450
+
451
+ if let _ = touches.first as UITouch? {
452
+
453
+
454
+
455
+ }
456
+
457
+ }
458
+
459
+ }
460
+
461
+ ```
462
+
463
+ drawText(text: "文字")

4

削除依頼しました。

2018/01/15 01:31

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,3 +1,3 @@
1
1
  同じ質問があったので取り消します。
2
2
 
3
- 同じ質問があったので取り消しま
3
+ 削除依頼を出しました

3

同じ質問があったので取り消します。

2017/12/30 16:35

投稿

tanakana
tanakana

スコア150

test CHANGED
@@ -1 +1 @@
1
- SpriteKitゲーム中に文章を表示したい。
1
+ おなじ質問があったの取り消したい。
test CHANGED
@@ -1,485 +1,3 @@
1
- ###前提・実現たいこと
1
+ 同じ質問があったので取り消ます。
2
2
 
3
- SpriteKitでゲーム中に文章を表示したい。
4
-
5
- http://neight968.hatenablog.com/entry/2015/07/22/040538
6
-
7
- 古い記事ですが、ここを参考にswift4で修正してみたのですが、実際の使い方が
8
-
9
- わかりません。
10
-
11
- テキストをどう定義して、どう呼び出したらいいのか
12
-
13
- MessageText.swiftのdrawText()を
14
-
15
- gameclear.swiftで使うにはどうすれば良いでしょうか?
16
-
17
- よろくお願いします。
3
+ 同じ質問があったので取り消します。
18
-
19
- ###発生している問題・エラーメッセージ
20
-
21
-
22
-
23
- エラーメッセージ
24
-
25
- ```
26
-
27
- Use of unresolved identifier
28
-
29
- ```
30
-
31
- ###該当のソースコード
32
-
33
- ```swift4
34
-
35
- 自分なりに修正してみました
36
-
37
- MessageText.swift
38
-
39
- import SpriteKit
40
-
41
-
42
-
43
- enum eTextState: Int {
44
-
45
- case send = 0 // 通常文字送り
46
-
47
- case skip // 文字送りスキップ
48
-
49
- case remove // 貼付けた文字の取り外し
50
-
51
- }
52
-
53
-
54
-
55
- /**
56
-
57
- * 文字送り用クラス
58
-
59
- * 現在は横文字表示しか対応していません。
60
-
61
- */
62
-
63
- class CSendText {
64
-
65
- // メンバ変数
66
-
67
- // テキストを文字送りするのに必要そうな変数
68
-
69
- var m_text: String? // 表示する文字列
70
-
71
- var m_count: Int = 0 // テキストの文字数取得
72
-
73
- var m_strcount: CGFloat = 0.0 // 現在何文字目表示したか
74
-
75
- var m_delayTime: CGFloat = 0.1 // 一文字毎に描画するのを遅らせる秒数
76
-
77
- var m_nextLineKey: Character = "嬲" // 改行キー
78
-
79
- var m_parentScene: SKScene? // とりつけるシーン
80
-
81
- var m_fontSize: CGFloat = 12.0 // フォントサイズ
82
-
83
- var m_labelArray: Array<SKLabelNode> = [] // 表示しているラベル達
84
-
85
- // 文字の位置決定用変数(後で変換するのが面倒なのでCGCloatで作成)
86
-
87
- var x: UInt = 0 // 横に何文字目か
88
-
89
- var y: UInt = 0 // 何行目か
90
-
91
- var maxWidth: UInt = 15 // 横に最大何文字表示するか
92
-
93
- var m_posX: CGFloat?
94
-
95
- var m_posY: CGFloat?
96
-
97
- var m_color: UIColor = UIColor.black
98
-
99
- var m_drawEndFlag: Bool = false
100
-
101
- var m_state: eTextState = .send {
102
-
103
- willSet{}
104
-
105
- didSet{
106
-
107
- switch m_state {
108
-
109
- case .send:
110
-
111
- self.m_delayTime = 0.1
112
-
113
- case .skip:
114
-
115
- self.skipDraw(text: m_text)
116
-
117
- case .remove:
118
-
119
- self.remove()
120
-
121
- }
122
-
123
- }
124
-
125
- }
126
-
127
- // (文字送りで表示するテキスト、フォントサイズ、初期位置X、初期位置Y、ラベルを取り付けるシーン)
128
-
129
- convenience init(text: String!, fontsize: CGFloat!, posX: CGFloat!, posY: CGFloat!, addView: SKScene!){
130
-
131
- self.init(text: text, fontsize: fontsize, posX: posX, posY: posY,addView: addView,nextLineKey: nil, maxWidth: nil, delayTime: nil, mode: nil, color: nil)
132
-
133
- }
134
-
135
-
136
-
137
- // (文字送りで表示するテキスト、フォントサイズ、初期位置X、初期位置Y、ラベルを取り付けるシーン、文字色)
138
-
139
- convenience init(text: String!, fontsize: CGFloat!, posX: CGFloat!, posY: CGFloat!, addView: SKScene!, color: UIColor!){
140
-
141
- self.init(text: text, fontsize: fontsize, posX: posX, posY: posY,addView: addView,nextLineKey: nil, maxWidth: nil, delayTime: nil, mode: nil, color: color)
142
-
143
- }
144
-
145
- // (文字送りで表示するテキスト、フォントサイズ、初期位置X、初期位置Y、ラベルを取り付けるシーン、横に書ける最大文字数)
146
-
147
- convenience init(text: String!, fontsize: CGFloat!, posX: CGFloat!, posY: CGFloat!, addView: SKScene!, maxWidth: UInt!){
148
-
149
- self.init(text: text, fontsize: fontsize, posX: posX, posY: posY,addView: addView,nextLineKey: nil, maxWidth: maxWidth, delayTime: nil, mode: nil, color: nil)
150
-
151
- }
152
-
153
- // (文字送りで表示するテキスト、フォントサイズ、初期位置X、初期位置Y、ラベルを取り付けるシーン、モード)
154
-
155
- convenience init(text: String!, fontsize: CGFloat!, posX: CGFloat!, posY: CGFloat!, addView: SKScene!, mode: eTextState){
156
-
157
- self.init(text: text, fontsize: fontsize, posX: posX, posY: posY,addView: addView,nextLineKey: nil, maxWidth: nil, delayTime: nil, mode: mode, color: nil)
158
-
159
- }
160
-
161
- // (文字送りで表示するテキスト、フォントサイズ、初期位置X、初期位置Y、ラベルを取り付けるシーン、文字表示の遅さ)
162
-
163
- convenience init(text: String!, fontsize: CGFloat!, posX: CGFloat!, posY: CGFloat!, addView: SKScene!, delayTime: CGFloat!){
164
-
165
- self.init(text: text, fontsize: fontsize, posX: posX, posY: posY,addView: addView,nextLineKey: nil, maxWidth: nil, delayTime: delayTime, mode: nil, color: nil)
166
-
167
- }
168
-
169
-
170
-
171
- init(text: String!, fontsize: CGFloat!, posX: CGFloat!, posY: CGFloat!, addView: SKScene!,
172
-
173
- nextLineKey: Character!, maxWidth: UInt!, delayTime: CGFloat!, mode: eTextState!, color: UIColor!){
174
-
175
- if (nextLineKey != nil) { m_nextLineKey = nextLineKey }
176
-
177
- if (maxWidth != nil) { self.maxWidth = maxWidth }
178
-
179
- if (delayTime != nil) { self.m_delayTime = delayTime }
180
-
181
- if (mode != nil) { self.m_state = mode }
182
-
183
- if (fontsize != nil) { self.m_fontSize = fontsize }
184
-
185
- if (color != nil) { self.m_color = color }
186
-
187
- self.m_posX = posX
188
-
189
- self.m_posY = posY
190
-
191
- self.m_parentScene = addView
192
-
193
- drawText(text: text)
194
-
195
- }
196
-
197
-
198
-
199
- required init?(coder aDecoder: NSCoder){
200
-
201
- fatalError("init(coder:) has not been implemented")
202
-
203
- }
204
-
205
- /// テキストの描画
206
-
207
- private func drawText(text: String!){
208
-
209
- // テキストの保管と文字数の取得
210
-
211
- var text: String = text
212
-
213
- m_text = text
214
-
215
- m_count = text.utf16.count
216
-
217
- if m_count == 0 { return } // 空なら描画せず終了
218
-
219
- for _ in 1 ... m_count {
220
-
221
- if m_state == .remove { return } // 表示途中で文字を消して、といった処理が来た時用のフラグと処理
222
-
223
- let chara:Character = text.remove(at: text.startIndex) // 一文字目をテキストから削除
224
-
225
- if chara == m_nextLineKey { // 嬲 は改行用のキー文時
226
-
227
- _ = y + 1 // 行目をプラス
228
-
229
- x = 0 // 行が変わるので、横ずらしを初期化
230
-
231
- } else if x > maxWidth { // 改行用の処理
232
-
233
- _ = y + 1 // 行目をプラス
234
-
235
- x = 0 // 同上
236
-
237
- } else if m_posX! + (m_fontSize * CGFloat(x)) + m_fontSize/2.0 > (m_parentScene?.frame.width)! { // 画面外にいかないように
238
-
239
- _ = y + 1 // 行目をプラス
240
-
241
- x = 0 // 同上
242
-
243
- }
244
-
245
- _ = x + 1
246
-
247
- // ラベルノードの生成
248
-
249
- let label: SKLabelNode = SKLabelNode(text: "(chara)")
250
-
251
- label.fontSize = m_fontSize // フォントサイズ指定
252
-
253
- label.position = CGPoint(x: m_posX! + (CGFloat(x-1) * m_fontSize), y: m_posY! - (CGFloat(y) * m_fontSize)) // 文字の位置設定
254
-
255
- label.alpha = 0.0 // 透明度の設定(初期は透明なので0.0)
256
-
257
- label.fontColor = m_color // 文字色指定
258
-
259
- m_parentScene?.addChild(label) // ラベルの取り付け
260
-
261
- m_labelArray.append(label) // ラベルの配列に登録
262
-
263
- // 表示する時間をずらすためのアクションの設定
264
-
265
- let delay = SKAction.wait(forDuration: TimeInterval(m_delayTime * m_strcount)) // 基本の送らせる時間に文字数を掛けることでずれを大きくする
266
-
267
- let fadein = SKAction.fadeAlpha(by: 1.0, duration: 0.5) // 不透明にするアクションの生成
268
-
269
- let seq = SKAction.sequence([delay, fadein]) // 上記2つのアクションを連結
270
-
271
- label.run(seq) // 実行
272
-
273
- m_strcount += 1.0 // 現在の文字数をプラス
274
-
275
- }
276
-
277
- y = 0
278
-
279
- x = 0
280
-
281
- m_strcount = 0.0
282
-
283
- }
284
-
285
-
286
-
287
-
288
-
289
- func skipDraw(text: String!){ //スキップモードの文字の描画
290
-
291
- if m_drawEndFlag { return }
292
-
293
- self.remove()
294
-
295
- var text: String = text // テキストの保管と文字数の取得
296
-
297
- m_count = text.utf16.count
298
-
299
- if m_count == 0 { return } // 空なら描画せず終了
300
-
301
- for _ in 1 ... m_count {
302
-
303
- if m_state == .remove { return } // 表示途中で文字を消して、といった処理が来た時用のフラグと処理
304
-
305
- let chara:Character = text.remove(at: text.startIndex) // 一文字目をテキストから削除
306
-
307
- if chara == m_nextLineKey { // 嬲 は改行用のキー文時
308
-
309
- _ = y + 1 // 行目をプラス
310
-
311
- x = 0
312
-
313
- } else if x > maxWidth { // 改行用の処理
314
-
315
- _ = y + 1 // 行目をプラス
316
-
317
- x = 0 // 行が変わるので、横にずらす距離を初期化
318
-
319
- } else if m_posX! + (m_fontSize * CGFloat(x)) + m_fontSize/2.0 > (m_parentScene?.frame.width)! {
320
-
321
- _ = y + 1 // 行目をプラス
322
-
323
- x = 0
324
-
325
- }
326
-
327
- _ = x + 1 // ラベルノードの生成
328
-
329
- let label: SKLabelNode = SKLabelNode(text: "(chara)") // "(chara)"とすることでStringに変換
330
-
331
- label.fontSize = m_fontSize // フォントサイズ指定
332
-
333
- // 文字の位置設定
334
-
335
- label.position = CGPoint(x: m_posX! + (CGFloat(x-1) * m_fontSize), y: m_posY! - (CGFloat(y) * m_fontSize))
336
-
337
- // 透明度の設定(スキップの場合、最初から不透明)
338
-
339
- label.fontColor = m_color // ラベルの取り付け
340
-
341
- m_parentScene?.addChild(label)
342
-
343
- m_labelArray.append(label)
344
-
345
- m_strcount += 1.0
346
-
347
- }
348
-
349
- y = 0 // 縦ずらし初期化
350
-
351
- x = 0 // 横ずらし初期化
352
-
353
- m_strcount = 0.0 // 描画した文字数の初期化
354
-
355
- }
356
-
357
-
358
-
359
- /// 文字が全て表示されたかの確認
360
-
361
- func checkDrawEnd(){
362
-
363
- if m_labelArray.last?.alpha == 1.0 {
364
-
365
- m_drawEndFlag = true
366
-
367
- }
368
-
369
- }
370
-
371
-
372
-
373
- /// 描画モードの切り替え
374
-
375
- func changeState( mode: eTextState ){
376
-
377
- self.m_state = mode
378
-
379
- }
380
-
381
-
382
-
383
- /// 描画の基本設定はそのままに、違う文へ切り替え
384
-
385
- func changeText(text: String!){
386
-
387
- if m_drawEndFlag {
388
-
389
- self.remove()
390
-
391
- self.changeState( mode: .send )
392
-
393
- drawText(text: text)
394
-
395
- } else {
396
-
397
- self.changeState( mode: .skip )
398
-
399
- }
400
-
401
- }
402
-
403
- // ラベルの取り外し
404
-
405
- func remove(){
406
-
407
- while m_labelArray.count > 0 {
408
-
409
- m_labelArray.last?.removeFromParent()
410
-
411
- m_labelArray.removeLast()
412
-
413
- m_drawEndFlag = false
414
-
415
- }
416
-
417
- }
418
-
419
- }
420
-
421
-
422
-
423
- ```
424
-
425
-
426
-
427
- gameclear.swift
428
-
429
- ```
430
-
431
-
432
-
433
- import SpriteKit
434
-
435
-
436
-
437
- class GameClear: SKScene {
438
-
439
- override func didMove(to view: SKView) {
440
-
441
- let LabelText = SKLabelNode(fontNamed: "Chalkduster")
442
-
443
- LabelText.text = "ゲームクリア!"
444
-
445
- let myBoundSize: CGSize = UIScreen.main.bounds.size
446
-
447
- let titlefont = Int(CGFloat(myBoundSize.width/9))
448
-
449
- LabelText.fontSize = CGFloat(titlefont)
450
-
451
- LabelText.position = CGPoint(x:self.frame.midX, y:self.frame.height / 2+200)
452
-
453
- self.addChild(LabelText)
454
-
455
- //表示したい文字
456
-
457
- drawText(text: "表示したい文字")
458
-
459
- //
460
-
461
- }
462
-
463
-
464
-
465
- override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
466
-
467
- if let _ = touches.first as UITouch? {
468
-
469
-
470
-
471
- }
472
-
473
- }
474
-
475
- }
476
-
477
-
478
-
479
- ```
480
-
481
-
482
-
483
-
484
-
485
- drawText(text: "文字")

2

折りたためていなかった。

2017/12/30 14:30

投稿

tanakana
tanakana

スコア150

test CHANGED
File without changes
test CHANGED
@@ -26,7 +26,7 @@
26
26
 
27
27
  Use of unresolved identifier
28
28
 
29
-
29
+ ```
30
30
 
31
31
  ###該当のソースコード
32
32
 
@@ -424,18 +424,12 @@
424
424
 
425
425
 
426
426
 
427
-
427
+ gameclear.swift
428
428
 
429
429
  ```
430
430
 
431
431
 
432
432
 
433
-
434
-
435
- gameclear.swift
436
-
437
-
438
-
439
433
  import SpriteKit
440
434
 
441
435
 
@@ -488,18 +482,4 @@
488
482
 
489
483
 
490
484
 
491
- ###試したこと
492
-
493
- 課題に対してアプローチしたことを記載してください
494
-
495
-
496
-
497
485
  drawText(text: "文字")
498
-
499
-
500
-
501
-
502
-
503
- ###補足情報(言語/FW/ツール等のバージョンなど)
504
-
505
- より詳細な情報

1

折りたたみ

2017/12/21 06:08

投稿

tanakana
tanakana

スコア150

test CHANGED
File without changes
test CHANGED
@@ -30,7 +30,7 @@
30
30
 
31
31
  ###該当のソースコード
32
32
 
33
- swift4
33
+ ```swift4
34
34
 
35
35
  自分なりに修正してみました
36
36
 
@@ -420,6 +420,14 @@
420
420
 
421
421
 
422
422
 
423
+ ```
424
+
425
+
426
+
427
+
428
+
429
+ ```
430
+
423
431
 
424
432
 
425
433
 
@@ -474,6 +482,8 @@
474
482
 
475
483
 
476
484
 
485
+ ```
486
+
477
487
 
478
488
 
479
489