我需要检测用户是否点击了 Sprite 节点。
这里我创建 Sprite 节点:
var enemy1Texture = SKTexture(imageNamed: "enemy1")
enemy1 = SKSpriteNode(texture: enemy1Texture)
enemy1.setScale(0.3)
enemy1.position = CGPoint(x: self.size.width * 0.5, y: self.size.height * 1.2)
self.addChild(enemy1)
在 touchesBegan
中,我设置了用于检测触摸的变量:
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
/* Called when a touch begins */
for touch: AnyObject in touches {
let touch = touches.first as? UITouch
let location = touch!.locationInNode(self)
let touchedNode = self.nodeAtPoint(location)
let touchedNodeName = touchedNode.name
enemy1.name = "enemy1"
enemy1.userInteractionEnabled = true
然后在函数的末尾,我检查被触摸的 Sprite 节点的名称并尝试执行相应的代码:
if touchedNodeName == "enemy1" {
//Enemy touched code
println("Enemy1 was touched!")
}
而且它不起作用。当我在 Sprite 节点向下移动屏幕时点击它时,没有任何内容打印到控制台。我做错了什么?
最佳答案
在创建 touchedNodeName 变量时,enemy1 节点的名称没有设置 Name 属性。移动
enemy1.name = "enemy1"
在节点创建之后
enemy1 = SKSpriteNode(texture: enemy1Texture)
变成了
enemy1 = SKSpriteNode(texture: enemy1Texture)
enemy1.name = "enemy1"
然后当你得到 touchedNode.name
时你可以检查它是否是“enemy1”
注意:如果您尝试在每次触摸中访问 .Name 属性,请小心,您应该为场景中的每个节点分配一个名称,否则它将为零。或者你可以检查
if(touchedNode.Name != nil){
//Then get the .Name variable and perform your checks
}
在另一种方法中,您可以检查您按下的节点是否是 enemy1 节点,但该节点应该在 touchesBegan 函数中可见,如下所示
if(touchedNode == enemy1){
//Your code here
}
关于swift - Sprite 节点不检测触摸?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31062983/