質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SpriteKit

SpriteKitは、iOSやOS Xで使用できるApple社製の2Dゲーム開発フレームワークです。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

0回答

690閲覧

ContentViewでSKSceneクラスのメソッドを実行したい

b150005

総合スコア2

SpriteKit

SpriteKitは、iOSやOS Xで使用できるApple社製の2Dゲーム開発フレームワークです。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2021/02/14 01:19

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の最新版を使っています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問