0

ゲームがあり、playScene で SKLabeleNode を作成する関数を作成しました。これで、この関数を呼び出してノードをシーンに追加できます。正常に動作し、ノードがシーンに追加されます。次は、シーンに追加したばかりのノードを選択できるようにする必要があります。///////////////////// 問題はこの時点で ////////////////////// /

ここでは、以前に作成したノードを選択し、関数で作成した SKLabelNode と比較します。関数で作成したノードが最初に選択したノードに対して == である場合は、関数で作成したノードを削除する必要があります。問題は、関数で作成されたノードを選択できないことです

//これは私が作成できる最小バージョンで、コピーして GameScene クラスに貼り付けて動作させることができます。//実行する必要があるのは、SKSpriteNode(imageNamed: "A") と SKSpriteNode(imageNamed: "B") を作成することだけです

import SpriteKit import Foundation クラス 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

関数内にノードがあり、その関数を子としてシーンに追加すると、テキストがシーンを下にスクロールしますが、ノードは親に追加されません。

ノードを関数の外に移動し、ノードの移動を処理する新しい関数を作成しました。

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

fallTheTextで関数を呼び出す必要がありましたdidMoveToView

于 2015-10-11T00:31:28.033 に答える