swift - Sprite 节点不检测触摸?

标签 swift sprite-kit

我需要检测用户是否点击了 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/

相关文章:

iOS9 Sprite 套件问题

swift - 停止 Sprite Kit 中的 RepeatActionForever swift

macos - 使用 swift 为 NSTextView 设置默认字体

ios - 如何从 UITableView 应用程序的详细 View 中删除当前行?

ios - 在 BarButtonItem Swift 上添加角标(Badge)计数图标

ios - 在快速触摸方法中滑动手势

sprite-kit - SKShapeNode(circleOfRadius) 在 OSX 的 Playground 中产生 "unrecognized selector sent to class"

ios - 我正在尝试制作一款横向卷轴游戏,但我正在努力无限地生成地面

ios - 如何从 tableView : cellForRowAtIndexPath: using `indexPath` argument? 中获取索引号

swift - Firebase 存储上传错误 : "Object albumNum/1 does not exist."