ContentViewでSKSceneクラスのメソッドを実行したい
SwiftUIでSpriteKitのSKSpriteNodeをSKSceneに描写するメソッドを実装しています。
メソッドの概要は、テキストフィールドに文字を入力し、ボタンを押すとテキストフィールドの文字列と一致する名前のノードが描写されるというものです。
どの部分を修正すればノードが描写されるのか教えていただけると助かります。
発生している問題
ContentViewでSKSceneクラスのメソッドaddNode()が動作しません。
なお、コンパイルエラー等はありません。
該当のソースコード
swift
1import SwiftUI 2import SpriteKit 3 4var nodeArrayGlobal = [SKSpriteNode]() 5 6class AppScene: SKScene, SKPhysicsContactDelegate { 7 override func didMove(to view: SKView) { 8 self.physicsWorld.gravity = CGVector(dx: 0, dy: -9.8) 9 } 10 11 func addNode() { 12 for i in 0 ..< nodeArrayGlobal.count { 13 addChild(nodeArrayGlobal[i]) 14 print("nodeArrayを描写") 15 } 16 } 17} 18 19struct ContentView: View { 20 @State private var text: String = "" 21 @State var nodeArray = [SKSpriteNode]() 22 23 func findImage(_ input: String) { 24 var nodeArray = [SKSpriteNode]() 25 let inputArray: [Character] = input.compactMap{$0} 26 27 for i in 0 ..< inputArray.count { 28 let nodeTexture = SKTexture(imageNamed: "(inputArray[i])") 29 let circularNode = SKSpriteNode(texture: nodeTexture) 30 circularNode.physicsBody 31 = SKPhysicsBody(circleOfRadius: max(circularNode.size.width / 2, 32 circularNode.size.height / 2)) 33 let texturedNode = SKSpriteNode(texture: nodeTexture, 34 size: CGSize(width: circularNode.size.width, 35 height: circularNode.size.height)) 36 37 texturedNode.scale(to: CGSize(width: 10, height: 10)) 38 texturedNode.physicsBody = SKPhysicsBody() 39 texturedNode.position = CGPoint(x: Double.random(in: 10 ... 818), y: 1500) 40 41 nodeArray.append(texturedNode) 42 print("nodeArrayにtexturedNodeを追加") 43 } 44 } 45 46 var scene: SKScene { 47 let scene = AppScene(fileNamed: "MyScene") 48 scene?.scaleMode = .resizeFill 49 return scene! 50 } 51 52 var body: some View { 53 ZStack { 54 SpriteView(scene: scene) 55 .edgesIgnoringSafeArea(.all) 56 HStack { 57 TextField("placeholder", 58 text: $text) 59 Button(action: { 60 findImage(text) 61 nodeArrayGlobal = nodeArray 62 AppScene().addNode() // 問題の箇所(addNode()が実行されない) 63 print("nodeArrayを描写 - 完了") 64 }, label: { 65 Text("put") 66 }) 67 } 68 } 69 } 70}
試したこと
addNode()にstaticを付与し、インスタンスがなくても実行できるようにした
-> AppScene型でインスタンスメンバaddChildを使用できない、という旨のエラー
既にインスタンス化したsceneを用いてscene.addNode()で呼び出した
-> SKScene型がメンバaddNodeを持っていない、という旨のエラー
補足情報(FW/ツールのバージョンなど)
Xcodeのバージョンは12.4の最新版を使っています。
あなたの回答
tips
プレビュー