SpriteKit:如何从SKSpriteNode中的一个点获取像素颜色?

我正在做一个迷宫游戏,我正在使用一个SKSpriteNode作为实际的2D迷宫。

我想检测用户触摸的SKSpriteNode上的点是黑色还是白色。 我已经做了一个UIImage这是与SKSpriteNode相同的图像,我使用UIImage上的方法来获取像素信息。 但是,UIImage与SKSpriteNode相比似乎偏移了一些。 当我在屏幕上移动手指时,它返回值,但这是不正确的。 我猜UIImage是不一样的大小和位置作为SKSpriteNode。

我怎样才能解决这个问题?

我使用以下来获取像素数据

extension UIImage { func getPixelColor(pos: CGPoint) -> UIColor { let pixelData = CGDataProviderCopyData(CGImageGetDataProvider(self.CGImage)) let data: UnsafePointer<UInt8> = CFDataGetBytePtr(pixelData) let pixelInfo: Int = ((Int(self.size.width) * Int(pos.y)) + Int(pos.x)) * 4 let r = CGFloat(data[pixelInfo]) / CGFloat(255.0) let g = CGFloat(data[pixelInfo+1]) / CGFloat(255.0) let b = CGFloat(data[pixelInfo+2]) / CGFloat(255.0) let a = CGFloat(data[pixelInfo+3]) / CGFloat(255.0) return UIColor(red: r, green: g, blue: b, alpha: a) } 

}

我已经做了我的SKSpriteNode这样

 var theColor : UIColor = UIColor() var bgImage = SKSpriteNode(imageNamed: mazeImageName) var mazeMap : UIImage = UIImage(named: mazeImageName)! override func didMoveToView(view: SKView) { bgImage.position = CGPointMake(self.size.width/2, self.size.height/2) bgImage.size = CGSize(width: self.size.width, height: self.size.height) self.addChild(bgImage) } 

这里是我真正得到的像素颜色

 override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) { if let touch = touches.first { theColor = (mazeMap.getPixelColor(touch.locationInNode(self))) var red : CGFloat = CGFloat() var green : CGFloat = CGFloat() var blue : CGFloat = CGFloat() var alpha : CGFloat = CGFloat() theColor.getRed(&red, green: &green, blue: &blue, alpha: &alpha) print("Red: \(red), Green: \(green), Blue: \(blue), Alpha: \(alpha)") } } 

你的图像的大小是否与你的SKScene大小相同?

touchesBegan函数中,尝试在bgImage而不是SKScene获取触摸的位置。

 theColor = (mazeMap.getPixelColor(touch.locationInNode(bgImage)))