[英]How do I get pixel color on touch from inside a SKScene?
我有一個用swift編寫的spritekit應用程序,我希望得到手指觸摸的像素上的顏色。
我已經看到了關於這個的多個帖子,並嘗試了全部,但不能縫合,讓它為我工作。 再加上其他帖子應該可以從UIView獲得顏色,而SKScene有一個繼承自UIView的SKIView應該可以從那里獲得顏色。
因此,為了使問題變得簡單易懂,我有一個例子。
創建一個新的spritekit應用程序並向其添加圖像。 在我的情況下,我創建了一個200x200像素的png圖像,其中包含許多不同的顏色。
這是GameScene.swift文件,它是我自動生成的唯一文件:
import SpriteKit
extension UIView {
func getColorFromPoint(point:CGPoint) -> SKColor {
var pixelData:[UInt8] = [0,0,0,0]
let colorSpace:CGColorSpace = CGColorSpaceCreateDeviceRGB()
let bitmapInfo = CGBitmapInfo(CGImageAlphaInfo.PremultipliedLast.toRaw())
let context = CGBitmapContextCreate(&pixelData, 1, 1, 8, 4, colorSpace, bitmapInfo)
CGContextTranslateCTM(context, -point.x, -point.y);
self.layer.renderInContext(context)
var red:CGFloat = CGFloat(pixelData[0])/CGFloat(255.0)
var green:CGFloat = CGFloat(pixelData[1])/CGFloat(255.0)
var blue:CGFloat = CGFloat(pixelData[2])/CGFloat(255.0)
var alpha:CGFloat = CGFloat(pixelData[3])/CGFloat(255.0)
var color:SKColor = SKColor(red: red, green: green, blue: blue, alpha: alpha)
return color
}
}
class GameScene: SKScene {
var myColorWheel:SKSpriteNode!
override func didMoveToView(view: SKView) {
let recognizerTap = UITapGestureRecognizer(target: self, action:Selector("handleTap:"))
view.addGestureRecognizer(recognizerTap)
myColorWheel = SKSpriteNode(imageNamed: "ColorWheel.png")
myColorWheel.anchorPoint = CGPoint(x: 0, y: 0)
myColorWheel.position = CGPoint(x: 200, y: 200)
self.addChild(myColorWheel)
}
func handleTap(recognizer : UITapGestureRecognizer)
{
let location : CGPoint = self.convertPointFromView(recognizer.locationInView(self.view))
if(myColorWheel.containsPoint(location))
{
let color = self.view?.getColorFromPoint(location)
println(color)
}
}
}
無論我在顯示器上按下圖像的位置,結果總是如此: Optional(UIDeviceRGBColorSpace 0 0 0 0)
您是否嘗試使用以下快照拍攝快照:
- (UIView *)snapshotViewAfterScreenUpdates:(BOOL)afterUpdates
然后從那個視圖中挑選顏色?
不確定系統如何在SKView中呈現.layer。
希望有所幫助。
干杯
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.