快速检测到 SKSpriteNode 触摸

Posted

技术标签:

【中文标题】快速检测到 SKSpriteNode 触摸【英文标题】:SKSpriteNode touch detected swift 【发布时间】:2015-12-23 18:08:03 【问题描述】:

我无法检测到被触摸的特定节点。这是我必须要做的。

let playagain = SKSpriteNode(imageNamed: "PlayAgain.png")

override func didMoveToView(view: SKView) 
    super.didMoveToView(view)


然后当玩家死亡时,这两个节点就会出现。

    playagain.position = CGPoint(x:frame.size.width * 0.5, y: frame.size.height * 0.5)
    addChild(playagain)

    gameover.position = CGPoint(x:frame.size.width * 0.5, y: frame.size.height * 0.75)
    addChild(gameover)

上面的一切都有效。该节点出现在我问我的屏幕上,我似乎无法让它显示我点击了它。 如您所见,该节点称为 playagain,当单击 playagain 节点时,我希望能够刷新游戏。到目前为止我所拥有的如下。

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) 

    for touch in touches 
       let location = (touch as! UITouch).locationInNode(self)
       let play = self.nodeAtPoint(location)
       if play.name == "playagain" 

           println("touched")
       
    

谢谢!

【问题讨论】:

【参考方案1】:

你没有使用最新的 Xcode 吗?你的 touches started 代码不应该在 swift 2 和 Xcode 7 上运行。

试试这个

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) 
    for touch in touches 
        let location = touch.locationInNode(self)

        if playagain.containsPoint(location) 

         /// playagain was pressed, do something
        
    

或者这个

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) 
    for touch in touches 
        let location = touch.locationInNode(self)
        let touchedNode = self.nodeAtPoint(location)

        if touchedNode == playagain 

         /// playagain was pressed, do something
        
    

【讨论】:

您能否将问题标记为已回答。谢谢

以上是关于快速检测到 SKSpriteNode 触摸的主要内容,如果未能解决你的问题,请参考以下文章

无法点击 SKSpriteNode - 未检测到触摸 ios

如何检测是不是已触摸 SKSpriteNode

如何检测 UITableView 上的“快速触摸”以切换到/从全屏?

自定义按钮视图:检测触摸向下/向上,快速,并回退拖动到 UIScrollView

在触摸时将动画添加到 SKSpriteNode (Swift)

如何使用该节点的自定义类检测在单独场景中创建的 skspritenode 上的触摸