我正在使用Xcode 6 Beta,我在另一个类中使用了这个确切的代码,以相同的方式设置。出于某种原因,它不想在这里工作。当我触摸SKNode时,我抓住它的名字,并将名称与两个字符串进行比较,如果它匹配其中任何一个,我执行一些代码。见下文。
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
for touch: AnyObject in touches {
let node: SKNode = self.nodeAtPoint(touch.locationInNode(self))
if node.name == "body" || "face" {
self.childNodeWithName("face").runAction(SKAction.rotateByAngle(6.283, duration: 0.75))
}
}
}
正如我之前所说,这个确切的代码在我使用过的其他任何地方都能完美运行,但无论我按哪个节点,if语句中的代码都会运行。是的,我打印出了我正在触摸的节点的名称,但它们并不匹配。有什么想法吗?
答案 0 :(得分:3)
你可能意味着
if node.name == "body" || node.name == "face" {
用括号更清楚,你在做:
if (node.name == "body") || ("face") {
并且"face"
是true
,这可能是Apple的一个错误,因为String
不符合LogicValue
所以你不应该像那样测试它。可能文字被解释为符合LogicValue
的其他内容,例如CString
。
答案 1 :(得分:2)
您的if
惯用词表示为switch
switch node.name {
case "body", "face":
self.childNodeWithName ...
default: break
}
答案 2 :(得分:1)
我认为应该
if node.name == "body" || node.name == "face" { //change this statement
在你的功能中替换它
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
for touch: AnyObject in touches {
let node: SKNode = self.nodeAtPoint(touch.locationInNode(self))
if node.name == "body" || node.name == "face" { //change this statement
self.childNodeWithName("face").runAction(SKAction.rotateByAngle(6.283, duration: 0.75))
}
}
}