touchBegan下不能select节点

Can not select node under touchBegan

我有一个游戏,在 playScene 中我创建了一个函数来创建 SKLabeleNode。现在我可以调用这个函数来将节点添加到场景中,它工作正常并将节点添加到场景中,所以接下来我需要能够 select 我刚刚添加到的节点现场。 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /

在这里我将 select 我之前创建的节点并将其与函数中创建的 SKLabelNode 进行比较,如果函数中创建的节点 == 我首先 selected我需要删除函数创建的节点。问题是我不能 select 在函数

中创建的节点

//这是我能制作的最小版本,可以将其复制并粘贴到 GameScene Class 中并运行。 //唯一要做的就是制作 SKSpriteNode(imageNamed: "A") 和 SKSpriteNode(imageNamed: "B")

导入 SpriteKit 导入基金会 class 游戏场景:SKScene {

var yellowColor = UIColor.yellowColor()
var redColor    = UIColor.redColor()

let upperCaseA  = SKSpriteNode(imageNamed: "A")
let upperCaseB  = SKSpriteNode(imageNamed: "B")

var smallSizeLatter  = CGSize()
var largeSizeLatter  = CGSize()

var tempVarToHoldPlaceToMakeItRun = SKLabelNode(text: "A")

var latterADefaults:   NSUserDefaults = NSUserDefaults.standardUserDefaults()
var latterBDefaults:   NSUserDefaults = NSUserDefaults.standardUserDefaults()

override func didMoveToView(view: (SKView!)) {

    _ = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: ("fallTheText"), userInfo: nil, repeats: true)

    self.backgroundColor = UIColor.whiteColor()

    latterADefaults.setBool(true, forKey: "latterADefaultsKey")
    latterBDefaults.setBool(true, forKey: "latterBDefaultsKey")
    smallSizeLatter      = CGSize(width: 37, height: 37)
    largeSizeLatter      = CGSize(width: 54, height: 54)
    upperCaseA.size      = smallSizeLatter
    upperCaseA.position  = CGPoint(x: self.frame.width / 8, y: self.frame.height  * 0.75)
    upperCaseB.size      = smallSizeLatter
    upperCaseB.position  = CGPoint(x: self.frame.width / 8, y: self.frame.height  * 0.65)

    self.addChild(upperCaseA)
    self.addChild(upperCaseB)

}
func fallTheText(){

    let theFallingText      = SKLabelNode(text: "A")

    let theLowerCaseLatter: [String] = ["a", "b",]
    let textIndex               = Int(arc4random_uniform(UInt32(2)))
    let lowerCaseLatter               = theLowerCaseLatter[textIndex]
    theFallingText.text     = lowerCaseLatter

    theFallingText.name = lowerCaseLatter

    print("the name is", theFallingText)


    let colorListOfColors: [UIColor] = [yellowColor, redColor,]
    let colorIndex                   = Int(arc4random_uniform(UInt32(2)))
    let colorOfColors                = colorListOfColors[colorIndex]
    theFallingText.fontColor     = colorOfColors


    theFallingText.fontName  = "HoeflerText-BlackItalic"
    theFallingText.fontSize  = 40


    func randomRange (lower: UInt32 , upper: UInt32) -> UInt32 {
        return lower + arc4random_uniform(upper - lower + 1)
    }
    let minValue                 = self.size.width / 3
    let maxValue                 = self.size.width - 50
    let uppers                   = UInt32(maxValue)
    let lowers                   = UInt32(minValue)
    let spawnPoint               = CGFloat(randomRange(lowers, upper: uppers))
    theFallingText.position  = CGPoint(x: spawnPoint, y: self.size.height * 0.85)


    let actionY                  = SKAction.moveToY(-30, duration: 20)
    theFallingText.runAction(SKAction.repeatActionForever(actionY))
    self.addChild(theFallingText)
}

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    for touch: AnyObject in touches{
        let positionOfTouch = touch.locationInNode(self)
        let nodeAtLocation = self.nodeAtPoint(positionOfTouch)
        if nodeAtLocation == upperCaseA {
            if latterADefaults.boolForKey("latterADefaultsKey"){
                upperCaseA.size = largeSizeLatter
                latterADefaults.setBool(false, forKey: "latterADefaultsKey")
                upperCaseB.size = smallSizeLatter
                latterBDefaults.setBool(true, forKey: "latterBDefaultsKey")
            }else{
                upperCaseA.size = smallSizeLatter
                upperCaseB.size = smallSizeLatter
                latterADefaults.setBool(true, forKey: "latterADefaultsKey")
            }
        }

////////问题出在我添加此临时节点的地方 运行/////////

        if nodeAtLocation == tempVarToHoldPlaceToMakeItRun{
            if tempVarToHoldPlaceToMakeItRun.text == "yellow"{
                print("danny", tempVarToHoldPlaceToMakeItRun.name)
                if upperCaseA.size == largeSizeLatter{
                    tempVarToHoldPlaceToMakeItRun.removeFromParent()
                    upperCaseA.size = smallSizeLatter
                }


            }
        }
        if nodeAtLocation == upperCaseB {
            if latterBDefaults.boolForKey("latterBDefaultsKey"){
                upperCaseA.size = smallSizeLatter
                latterADefaults.setBool(true, forKey: "latterADefaultsKey")
                upperCaseB.size = largeSizeLatter
                latterBDefaults.setBool(false, forKey: "latterBDefaultsKey")
            }else{
                upperCaseB.size = smallSizeLatter
                latterBDefaults.setBool(true, forKey: "latterBDefaultsKey")
            }
        }
    }
}

}

如何触摸这个节点来比较它? 我已经将函数更改为 return a SKLabelNode 没有运气。 我尝试使用没有 return 值的函数,但运气不好。 我已经删除了 NSTimer 并将函数添加为 self.addChild(fallTheText) 但没有运气。 在所有情况下,函数中创建的 SKLabelNode 都在场景中向下流动。 现在好了,当我尝试比较它们时,我触摸了第一个节点,它做出了反应,但它现在也从函数中添加了一个新节点,但它不应该。当我尝试 select 函数创建的下降节点时,它只是不断从函数中添加更多节点,而不会 select 下降的节点。

objective是随机掉落的后者和固定图像'that will resize when touched'比较它们然后删除掉落的帐篷字母。

使用

为场景设置物理边界
self.physicsBody = SKPhysicsBody(edgeLoopFromRect:
        CGRectMake(0, 0, self.frame.width, self.frame.height))

请检查场景大小是否与屏幕大小相同。否则边界将设置在屏幕区域之外。

使用

将物理体设置到标签
labelNode.physicsBody = SKPhysicsBody(rectangleOfSize: labelNode.frame.size)

设置标签的categoryBitMaskcollisionBitMask有选择地进行碰撞。 更多信息:https://developer.apple.com/library/ios/documentation/GraphicsAnimation/Conceptual/CodeExplainedAdventure/HandlingCollisions/HandlingCollisions.html

在函数中有一个节点并将该函数作为子函数添加到场景中会使文本在场景中向下滚动,但不会将节点添加到父节点。

我将节点移到了函数之外,并创建了一个新函数来处理节点的移动。

func timer1(){
    theFallingText.removeActionForKey("actionYKey")
    let actionYY = SKAction.moveToY(self.size.height * 0.85, duration: 0.0)
    theFallingText.runAction(SKAction.repeatAction(actionYY, count: 1))
    fallTheText()    
}

我不得不调用 didMoveToView 中的 fallTheText 函数。