我正在使用 SpriteKit 和 Swift 制作一个游戏,运行 Xcode 6。我有一个SKLabelNode
,我们称之为myLabelNode
对于这个例子。当我打电话时myLabelNode.removeFromParent()
它会像它应该的那样从场景中删除节点。节点数减少 1,并且在屏幕上的任何位置都看不到。但是,当我单击该位置时myLabelNode
以前是,我的程序仍然会调用只应在以下情况下发生的函数:myLabelNode
被感动了。我也尝试过结合myLabelNode.removeFromParent()
with myLabelNode.hidden = true
,但它仍然是可触摸的,并且即使不应该调用该函数。我应该如何解决这个问题?我应该使用不同的方法吗?这应该发生吗?
Edit:
let lemonadeLabel = SKLabelNode(fontNamed: "Optima-ExtraBlack")
override func didMoveToView(view: SKView) {
lemonadeLabel.text = "Lemonade Stand"
lemonadeLabel.fontSize = 24
lemonadeLabel.fontColor = SKColor.yellowColor()
lemonadeLabel.position = CGPoint(x: size.width/2, y: size.height*0.66)
lemonadeLabel.zPosition = 2.0
addChild(lemonadeLabel)
}
override func touchesEnded(touches: NSSet, withEvent event: UIEvent) {
let touch = touches.anyObject() as UITouch
let location = touch.locationInNode(self)
if lemonadeLabel.containsPoint(location) {
println("lemonadeLabel pressed")
lemonadeLabel.removeFromParent()
/*lemonadeLabel is now be removed,
however if I click the area where it
used to be, "lemonadeLabel pressed"
will print to the console*/
}
}
您正在尝试确定 constrainPoints 的位置是否被触摸。即使您从场景中删除标签,它仍然是内存中的一个对象,即:您可以稍后重新添加它..它仍然具有所有属性,包括位置等。
我会尝试这个:
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
for touch: AnyObject in touches {
if nodeAtPoint(touch.locationInNode(self)) == lemonadeLabel {
println("lemonadeLabel pressed")
lemonadeLabel.removeFromParent()
}
}
}
您基本上确定柠檬水标签是否是该位置的节点,如果是,则将其删除。由于您与场景中添加的节点进行比较,如果它消失了,它将不会在那里进行比较;)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)