1

私はSKSceneにこのコードを持っています:

override func touchesBegan(touches: NSSet!, withEvent event: UIEvent!) {

    var touch: AnyObject = touches.anyObject()
    var point = getPoint(touch.locationInNode(self))
    var name  = NSStringFromCGPoint(point)

    for children in self.children {

        if (children as SKSpriteNode).name == name {

            println("exist!")
        }
    }
    var tempNode = self.childNodeWithName(name)
}

「存在する!」と見えます。ログにあるため、children 配列にこの名前のノードがありますが、 tempNodenilです。self.childNodeWithName("//" + name)呼び出しもnilを返します。

4

2 に答える 2

0

Swift 2.2を使用してこの奇妙さを発見しました。おそらくバグです..中括弧から文字列を消去せずに NSStringFromCGPoint と childNodeWithName を使用することはできません:

この小さな方法を使用して:

func removeBraces(s:String)->String {
    return s.stringByTrimmingCharactersInSet(NSCharacterSet.init(charactersInString: "{}"))
}

SKSpriteNode を追加するときは、たとえば次のようにします。

...
mySpriteNode.name = removeBraces(NSStringFromCGPoint(mySpriteNode.position))
...

あなたのケースのためにそれを取得するには:

override func touchesBegan(touches: NSSet!, withEvent event: UIEvent!) {

    var touch: AnyObject = touches.anyObject()
    var point = getPoint(touch.locationInNode(self))
    var name  = removeBraces(NSStringFromCGPoint(point))
    if let child = self.childNodeWithName(name) {
        print("I've found: \(child)")
    }
    ...
}
于 2016-03-29T14:40:52.827 に答える