

このようなプログラムを、XcodeのPlaygroundで作りました  
しかし、touchesBeganが動作しません  
上手く行けば、「touched」と表示されるはずなのですが、表示されません

[code]

    import UIKit
    import SpriteKit
    import PlaygroundSupport
    
    class set: SKScene {
        //var Progress = 0
        //var button: SKNode? = nil
    
        func start() {
            let sceneWidth = 450.0
            let sceneHeight = 800.0
            //var ProcessSeed = 0
            let sceneView = SKView(frame: CGRect(x: 0.0, y: 0.0, width: sceneWidth, height: sceneHeight))
            PlaygroundPage.current.liveView = sceneView
            let back: SKScene = SKScene(size: CGSize(width: sceneWidth, height: sceneHeight))
            back.backgroundColor = UIColor.white
            sceneView.presentScene(back)
    
            let character = SKSpriteNode(imageNamed: "SobacchiStand.png")
            character.position = CGPoint(x: sceneWidth/2, y: sceneHeight/2)
            character.xScale = 0.5;
            character.yScale = 0.5;
            back.addChild(character)
    
            let button = SKSpriteNode(imageNamed: "Button.png")
            button.xScale = 0.1;
            button.yScale = 0.1;
            button.position = CGPoint(x: 400.0, y:100.0)
            button.zPosition = 1
            button.name = "button"
            back.addChild(button)
    
            button.isUserInteractionEnabled = true
            }
        func doit() {
            print("実行")
            print("されています")
        }
    
       /* override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
            if let touch = touches.first as UITouch? {
                let location = touch.location(in: self)
                if self.atPoint(location).name == "button" {
                    print("button tapped")
                }
            }
        }*/
        override func touchesBegan(_ touches: Set<UITouch>,with event: UIEvent?)   
    {     //super.touchesBegan(touches, with: event)
            print("touched")
       }
        override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
            super.touchesEnded(touches, with: event)
           print("touchend")
        }
    }
    
    let first = set()
    let second = first.start()
    var Progress = 0
    
    /*while Progress <= 100 {
        first
    }*/
    
[/code]

エラー自体は出ていない上、どのサイトを見ても、間違っている点が見当たらないのですが、どこか間違っているのでしょうか？


CC BY-SA 3.0
2017-04-02T18:20:31.103
33719
2021-04-02T02:08:00.893
21307
question
swift spritekit
touchesBeganが動作しない


> エラー自体は出ていない上、

以前なさった[質問](https://ja.stackoverflow.com/questions/33690/skspritenode%E3%81%8Cnil%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%A6%E3%81%97%E3%81%BE%E3%81%86)のコメント欄で指摘させていただいたのですが、提示のコードは、じっさいPlaygroundに記述して、実行したものを、そのままコピーしてください。異なるものを提示していただくと、いかに正しい的確な回答をしても、「回答どおりにしても解決しない」ということが起きてしまいます。

_最後から2行目_

[code]

    let second = first.start()
    
[/code]

ここで、「Constant 'second' inferred to have type '()', which may be
unexpected」という警告（ビルドはできるが、書式に問題があるという警告）が出ます。このことから、提示のコードと、Playgroundで実行したコードが、異なることがわかります。メソッド`start()`は、返り値がない、言い換えると返り値が`Void`（`()`）なので、変数`second`の型を推論すると`Void`（`()`）になっちゃうよ？という警告です。`let
second =`を削除してください。

* * *

本題に入ります。

_15行目_

[code]

    let back: SKScene = SKScene(size: CGSize(width: sceneWidth, height: sceneHeight))
    
[/code]

これを書き換えてください。

[code]

    let back = set(size: CGSize(width: sceneWidth, height: sceneHeight))
    
[/code]

この変更で、意図どおりの結果になりますが、無駄があるコードです。  
それと、Swiftの推奨命名規則として、クラス名は大文字で始めるようにしてください。

[code]

    class set: SKScene {
    // 推奨は、こう
    class Set: SKScene {
    
[/code]


CC BY-SA 3.0
2017-04-02T23:15:45.073
33721
2017-04-02T23:15:45.073
2017-04-13T12:52:39.113
-1
18540
33719
answer