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

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

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

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

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Q&A

解決済

1回答

4230閲覧

touchesBeganが動作しない

Kenelaoy

総合スコア50

SpriteKit

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

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

0グッド

0クリップ

投稿2017/04/02 18:27

編集2017/04/02 18:28

Swift Playgroundで以下のようなプログラムを作成しています(前に質問させていただいたものと同じです)

Swift

1import UIKit 2import SpriteKit 3import PlaygroundSupport 4 5class set: SKScene { 6 //var Progress = 0 7 //var button: SKNode? = nil 8 9 func start() { 10 let sceneWidth = 450.0 11 let sceneHeight = 800.0 12 //var ProcessSeed = 0 13 let sceneView = SKView(frame: CGRect(x: 0.0, y: 0.0, width: sceneWidth, height: sceneHeight)) 14 PlaygroundPage.current.liveView = sceneView 15 let back: SKScene = SKScene(size: CGSize(width: sceneWidth, height: sceneHeight)) 16 back.backgroundColor = UIColor.white 17 sceneView.presentScene(back) 18 19 let character = SKSpriteNode(imageNamed: "SobacchiStand.png") 20 character.position = CGPoint(x: sceneWidth/2, y: sceneHeight/2) 21 character.xScale = 0.5; 22 character.yScale = 0.5; 23 back.addChild(character) 24 25 let button = SKSpriteNode(imageNamed: "Button.png") 26 button.xScale = 0.1; 27 button.yScale = 0.1; 28 button.position = CGPoint(x: 400.0, y:100.0) 29 button.zPosition = 1 30 button.name = "button" 31 back.addChild(button) 32 33 button.isUserInteractionEnabled = true 34 } 35 func doit() { 36 print("実行") 37 print("されています") 38 } 39 40 /* override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 41 if let touch = touches.first as UITouch? { 42 let location = touch.location(in: self) 43 if self.atPoint(location).name == "button" { 44 print("button tapped") 45 } 46 } 47 }*/ 48 override func touchesBegan(_ touches: Set<UITouch>,with event: UIEvent?) { //super.touchesBegan(touches, with: event) 49 print("touched") 50 } 51 override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { 52 super.touchesEnded(touches, with: event) 53 print("touchend") 54 } 55} 56 57let first = set() 58let second = first.start() 59var Progress = 0 60 61/*while Progress <= 100 { 62 first 63}*/ 64

しかし、touchesBeganが動作しません
画像の表示までは上手く出来ているのですが・・・

エラーも出ておらず、qiitaなどで書かれているコードとも大きな違いが見受けられないため、余計に混乱しています
どのようにしたら動作するようになるのでしょうか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

start()の中で作成しているのはSKSceneでありsetではないので、setのtouchesBegan等は呼ばれません。たとえば以下のように、setを作成してそれにSKSpriteNodeをaddChildして、setをSKViewのpresentSceneに渡せばtouchesBeganが呼ばれると思います。
(それからsetという名前はアッパーキャメルケースにして別の名前にしたほうがよいと思います。)

Swift

1import UIKit 2import SpriteKit 3import PlaygroundSupport 4 5class set: SKScene { 6 func start() { 7 backgroundColor = UIColor.white 8 9 let character = SKSpriteNode(imageNamed: "SobacchiStand.png") 10 character.position = CGPoint(x: frame.width / 2.0, y: frame.height / 2.0) 11 character.xScale = 0.5; 12 character.yScale = 0.5; 13 addChild(character) 14 15 let button = SKSpriteNode(imageNamed: "Button.png") 16 button.xScale = 0.1; 17 button.yScale = 0.1; 18 button.position = CGPoint(x: 400.0, y:100.0) 19 button.zPosition = 1 20 button.name = "button" 21 addChild(button) 22 23 button.isUserInteractionEnabled = true 24 } 25 26 override func touchesBegan(_ touches: Set<UITouch>,with event: UIEvent?) { //super.touchesBegan(touches, with: event) 27 print("touched") 28 } 29 30 override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { 31 super.touchesEnded(touches, with: event) 32 print("touchend") 33 } 34} 35 36let view:SKView = SKView(frame: CGRect(x: 0, y: 0, width: 450, height: 800)) 37let first = set(size: CGSize(width: 450, height: 800)) 38first.start() 39view.presentScene(first) 40PlaygroundPage.current.liveView = view

投稿2017/04/03 02:58

rizumita

総合スコア84

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問