簡體   English   中英

如何從SKScene內部獲得像素顏色?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM