确定手势识别器中触摸的节点

2024-05-31

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

@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?")
            }
        }

    }
}

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


  1. 在 GameScene 文件中,我在 didMove 方法中创建了按钮,如下所示

    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)
    
  2. 在didMove中添加手势:

    let tapRec = UITapGestureRecognizer()
    tapRec.addTarget(self, action:#selector(GameScene.tappedView(_:) ))
    tapRec.numberOfTouchesRequired = 1
    tapRec.numberOfTapsRequired = 1
    self.view!.addGestureRecognizer(tapRec)
    
  3. 最后实现tappedView方法

    @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?")
            }
        }
    }
    }
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

确定手势识别器中触摸的节点 的相关文章

  • 如果用户沿负方向平移 x 和 y,UIPanGestureRecognizer 不会切换到状态“结束”或“取消”

    我的 UIPanGestureRecognizer 有一点问题 识别器不报告 UIGestureRecognizerStateEnded 状态如果用户平移到左上角 意味着负 x 和 y 方向 如果有任何方向 状态将更改为 UIGesture
  • 如何TDD UIGestureRecognizers?

    在尝试使用 UIGestureRecognizer 编写 TDD 代码时 我发现无法以编程方式验证目标操作 如果没有这个 我不确定我是否可以正确测试它 如果手势识别器在 IB 中设置 支持 iOS 5 则目标动作会在 NIB Storybo
  • SpriteKit 中的攻击按钮

    我对 Xcode 有点陌生 一直在为我的班级制作 2d 游戏 我已经有一段时间遇到按钮问题了 我刚刚找到了为什么我的跳跃按钮不起作用的解决方案 但我还有一个攻击按钮 我设置了代码 使按钮显示在屏幕上并在按下时更改其图像 但是 我不知道要放入
  • 如果按下子视图的按钮如何取消 UIGestureRecognizer

    我正在努力从手势识别器中获得我想要的行为 特别是在其他手势已触发时取消某些手势 我有一个滚动视图设置为分页和每个页面中的多个子视图 我添加了一个触摸手势识别器 如果用户点击页面的右侧或左侧 则可以滚动到下一页或上一页 Add a gestu
  • 精灵套件的方向键

    我有兴趣尝试创建一些游戏 即新的精灵套件 然而 对于我想要的游戏 我宁愿使用方向键而不是操纵杆 由于我将从 Cocos 转移过来 我的旧程序不再起作用 所以那个 dpad 也不起作用 遗憾的是 我还没有遇到任何可能有助于在新的精灵套件中实现
  • 在 Swift 中将动态 Int 变量从一个类传递到另一个类

    我是 swift 2 的新手 我陷入了将变量从一个类传递到另一个类的过程中 我有一个类 GameScene 我有一个公共变量score并且在更新功能中不断更新 我想发送score两个节点相互碰撞时的值 一旦它发生碰撞 我就会使用 mainv
  • 防止UIScrollView的UIPanGestureRecognizer遮挡UIScreenEdgePanGestureRecognizer

    我有一个UIScrollView它填满了我应用程序的一页上的屏幕 但我希望允许用户从屏幕边缘平移以显示其后面的视图 问题是 UIScrollView 窃取了我的触摸UIScreenEdgePanGestureRecognizer在屏幕边缘
  • 使用 Swift 在 Sprite Kit 中构建棋盘游戏? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 在使用 Swift 的 Sprite Kit 中 我试图构建一个国际象棋棋盘 实际上是一个类似国际象棋的棋盘 平铺网格 那么一般来说
  • SpriteKit - 对多个 SKNode 上运行的多个 SKAction 进行排序

    我非常了解 SKAction API 但在多个节点上运行顺序代码时我无法获得良好的代码 这是示例代码 简化 import SpriteKit class GameScene SKScene weak var node1 SKNode wea
  • SKScene和SKView的paused属性之间的区别

    我使用以下代码暂停 SKScene self paused YES 然而 根据这个answer https stackoverflow com a 21593852 2043580 by 安德烈 戈尔杰耶夫 https stackoverf
  • 如何使用社交框架呈现 SKscene 中的 UIViewController?

    我正在制作一款类似 Flappy Bird 的游戏 如何从 SKScene 呈现 UIViewController 首先 我告诉我的环境 Mac OS X 10 9 Xcode 5 0 2 Sprite Kit framework soci
  • 将图像作为球分配给 SKShapeNode - Spritekit 游戏

    我正在尝试在 Swift 2 Sprite kit 游戏中向我的球添加图像 我有一个make ball 函数 但在游戏场景中没有错误 当调用该方法时 我不断收到此错误 无法分配 SKShapeNode 来输入 Ball 我不知道如何修复 并
  • 使用 SpriteKit 显示横幅广告

    我是 SpriteKit 的新手 刚刚发布了我的第一个游戏 现在我想在游戏中添加横幅广告 然而 我完全迷失了 大多数教程告诉您只需调用 self canDisplayBannerAds YES 在viewDidLoad方法中 我正在这样做
  • 如何为具有圆角的精灵设置物理体

    我创建了一个SKShapeNode通过以下方式 let sprite SKShapeNode rect CGRect x 20 y 10 width 40 height 20 cornerRadius 10 我也像这样设置了一个物理体 sp
  • 从其超级视图 iOS 7 问题中获取 UITableViewCell

    我的单元格中几乎没有具有手势识别器实例的 UI 对象 我需要获取按压对象所在的单元格 我有下面的方法来获取它 但它只在 iOS 7 之前有效 UITableViewCell cell UITableViewCell sender view
  • 如何在 SpriteKit SKScene 类中启动 ReplayKit 屏幕录制

    我已经实施了ReplayKit in my SpriteKit游戏 但由于一切都在游戏内完成GameViewController录制按钮出现得太早 请看我的GameViewController下面的类 class GameViewContr
  • locationOfTouch 和 numberOfTouches

    你好 我有这个识别器 设置为 2 次触摸 但它只返回一个 而不是两个 CGPoint void gestureLoad UIGestureRecognizer recognizer recognizer UITapGestureRecogn
  • SpriteKit SKView 显示字段内存使用情况

    我很好奇什么时候showsFields开启后 内存占用增长极快 它可以在 30 秒内增长到 500MB 如果我的Mac只有8GB RAM 在出现内存警告之前我可能只有不到8分钟的时间来调试 在真实设备上调试时会最糟糕 下面的屏幕截图是在真实
  • 将带有 SKEffectNode 的 CIFilter 应用到 SKSpriteNode

    我正在尝试将带有 SKEffectNode 的 CIFilter 应用于 SKSpriteNode 无法让它工作 也不知道为什么 我使用模糊来实现此功能 但无法获得单色照片效果 有人有任何见解吗 再次感谢 Mono Effect not w
  • SpriteKit SKTexture 崩溃

    不知道为什么这不起作用 当它尝试创建船舶节点时 它会因 EXC BAD ACCESS 而崩溃 SKTexture tex SKTexture textureWithImageNamed Spaceship CIFilter filter C

随机推荐