0

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

在这里,我将选择我之前创建的一个节点,并将其与函数中创建的 SKLabelNode 进行比较,如果函数中创建的节点是 == 到我首先选择的节点,我需要删除函数创建的节点。问题是我无法选择在函数中创建的节点

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

导入 SpriteKit 导入基础类 GameScene: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")
            }
        }
    }
}

}

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

目标是随机掉落的后者和固定图像“触摸时会调整大小”比较它们,然后删除掉落的帐篷字母。

4

2 回答 2

0

使用为场景设置物理边界,

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

于 2015-02-04T03:06:10.930 回答
0

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

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

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()    
}

我不得不fallTheTextdidMoveToView.

于 2015-10-11T00:31:28.033 回答