在SKScene swift中获取点的颜色
问题描述:
我需要在Swift中获取我的游戏的像素/点的颜色。所以我试图找到一个输入一个CGPoint并返回一个Color的函数,到目前为止我发现的所有东西都只返回(0,0,0,0)。我认为这是因为我在我的游戏场景类(这是一个SKScene)中执行此操作,并且场景仅由视图控制器加载。任何方案?在SKScene swift中获取点的颜色
(如果有更好的方法来检查,如果一个精灵被触摸的颜色,将工作以及)
在此先感谢。
答
添加下面的方法:
extension UIView {
func getColor(at point: CGPoint) -> UIColor{
let pixel = UnsafeMutablePointer<CUnsignedChar>.allocate(capacity: 4)
let colorSpace = CGColorSpaceCreateDeviceRGB()
let bitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.premultipliedLast.rawValue)
let context = CGContext(data: pixel, width: 1, height: 1, bitsPerComponent: 8, bytesPerRow: 4, space: colorSpace, bitmapInfo: bitmapInfo.rawValue)!
context.translateBy(x: -point.x, y: -point.y)
self.layer.render(in: context)
let color = UIColor(red: CGFloat(pixel[0])/255.0,
green: CGFloat(pixel[1])/255.0,
blue: CGFloat(pixel[2])/255.0,
alpha: CGFloat(pixel[3])/255.0)
pixel.deallocate(capacity: 4)
return color
}
}
你可以得到你想要的点的颜色与
let color = someView.getColor(at: somePoint)
http://stackoverflow.com/questions/1160229/how-to-get一个像素在uiview中的颜色具有代码Swift 2和3:http://stackoverflow.com/a/26945594/1187415 –
@MartinR这些解决方案似乎只返回透明/黑色为以及 – joshLor
取决于你何时/如何得到它。场景和视图完全是2种不同的东西,所以你场景中的坐标可能不会反映你在视图中的坐标,加上内容直到绘制之后才会呈现给上下文。最重要的是,你需要担心视网膜,这也可能导致无效像素。也许真正的问题是,为什么你需要一个单独的点,并有更好的选择? – Knight0fDragon