ゲームがあり、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 は、すべてのケースでシーンを流れています。それらを比較しようとすると、最初のノードに触れると反応しますが、関数から新しいノードが追加されるようになりましたが、そうではありません。関数によって作成された落下ノードを選択しようとすると、関数からさらにノードを追加し続け、落下しているノードを選択しません。
目的は、ランダムに落下する後者と、「触れるとサイズが変わる」固定画像を比較して、落下したテント文字を削除することです。