在SpriteKit中检测对象的子节点上的触摸
我有一个自定义类,它是一个SKNode,它又有几个SKSpriteNodes。 有没有一种方法可以检测到我的游戏场景中的这些小孩SKSpriteNodes?
我正在迅速工作
override func touchesEnded(touches: NSSet, withEvent event: UIEvent) { let touch = touches.anyObject() as UITouch let touchLocation = touch.locationInNode(self) if([yourSprite containsPoint: touchLocation]) { //sprite contains touch } }
资料来源: http : //www.raywenderlich.com/84434/sprite-kit-swift-tutorial-beginners
检查苹果的SceneKitVehicle演示。 有人把它移植到Swift上 。
你想要的代码是在GameView.swift文件中。 在GameView中,您将看到touchesBegan覆盖。 这是我的Swift 2.1的版本:
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { guard let scene = self.overlaySKScene else { return } let touch = touches.first! let viewTouchLocation = touch.locationInView(self) let sceneTouchPoint = scene .convertPointFromView(viewTouchLocation) let touchedNode = scene.nodeAtPoint(sceneTouchPoint) if (touchedNode.name == "Play") { print("play") } }
如果不清楚, GameView通过Storyboard被设置为应用程序的视图类。
您需要比较Touch的位置和您的SKNode的位置
您可以使用locationInNode(),通过以下方法之一获取触摸的位置:
- 的touchesBegan()
- touchesMoved()
- touchesEnded()
- “这个项目不能共享。 请select其他项目。“WhatsApp iOS共享扩展失败消息
- Xcode 7:'supportedInterfaceOrientations'实现中的返回types冲突:'UIInterfaceOrientationMask'vs'NSUInteger'
- 如何让SKActions通过Sprite Kit中的SKTransition运行?
- SpriteKit:在场景之间传递数据
- SpriteKit。 与重力相反的applyForce混淆
- SpriteKit得分是随机的
- SpriteKit着色器崩溃iOS 9:SKDefaultShading,gl_FragCoord
- 如何创build倒数计时器的循环进度指示器
- 以安全格式存储游戏偏好和保存的游戏