确定手势识别器中触摸的节点 [英] Determine Node Touched in Gesture Recognizer

查看:26
本文介绍了确定手势识别器中触摸的节点的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个 SpriteKit 场景,其中可以有数千个不同的节点.我还在场景中实现了一个单击手势识别器,希望一旦手势识别器被触发,我就可以确定场景中哪个节点被触摸了.目前,我的(非工作)代码如下所示:

I have a SpriteKit scene that can have thousands of distinct nodes in it. I am also implementing a single-tap gesture recognizer on the scene, in the hopes that I can determine which node has been touched in the scene once the gesture recognizer is triggered. Currently, my (non-working) code looks like this:

@objc func singleTap(_ sender: UIPinchGestureRecognizer) {
    print("single tap gesture recognized")

    if sender.numberOfTouches == 1 {

        let touchPoint = sender.location(in: self.view)
        let touchedNode = self.atPoint(touchPoint)

        if let name = touchedNode.name
        {
            if name == "newMapButton"
            {
                print("newMapButton Touched")
            } else {
                print("what did you touch?")
            }
        }

    }
}

手势识别器正在工作.当我触摸新的地图按钮时,我会在控制台中看到识别出单击手势",但仅此而已.我在这里做错了什么?

The gesture recognizer is working. When I touch the new map button I get the "single tap gesture recognized" in the console, but nothing more. What am I doing wrong here?

推荐答案

  1. 在 GameScene 文件中,我像这样在 didMove 方法中创建了我的按钮

  1. In GameScene file, I created my button in didMove method like so

let btnTest = SKSpriteNode(imageNamed: "button")
btnTest.setScale(0.2)
btnTest.name = "Button"
btnTest.zPosition = 10
btnTest.position = CGPoint(x: 100, y: 200)
self.addChild(btnTest)

  • 在 didMove 中添加手势:

  • Adding Gesture in didMove:

    let tapRec = UITapGestureRecognizer()
    tapRec.addTarget(self, action:#selector(GameScene.tappedView(_:) ))
    tapRec.numberOfTouchesRequired = 1
    tapRec.numberOfTapsRequired = 1
    self.view!.addGestureRecognizer(tapRec)
    

  • 终于实现了 tappedView 方法

  • Finally implementing tappedView method

    @objc func tappedView(_ sender:UITapGestureRecognizer) {
    
    if sender.state == .ended {
    
        var post = sender.location(in: sender.view)
        post = self.convertPoint(fromView: post)
        let touchNode = self.atPoint(post)
    
        if let name = touchNode.name
        {
            if name == "Button"
            {
                print("newMapButton Touched")
            } else {
                print("what did you touch?")
            }
        }
    }
    }
    

  • 这篇关于确定手势识别器中触摸的节点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆