ios - SpriteKit : How can I get the pixel color from a point in SKSpriteNode?

标签 ios swift sprite-kit

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

我想检测用户触摸的 SKSpriteNode 上的点是黑色还是白色。我制作了一个与 SKSpriteNode 相同的图像的 UIImage,并且我在 UIImage 上使用一种方法来获取像素信息。但是,与 SKSpriteNode 相比,UIImage 似乎有所偏移。当我在屏幕上移动手指时它返回值,但它是不正确的。我猜 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)))

关于ios - SpriteKit : How can I get the pixel color from a point in SKSpriteNode?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32941784/

相关文章:

ios - 如何使用 SwipeGestureRecognizer 更改 UIImageView 图像?

swift - 识别质数

swift - 如何从 Swift REPL 获取可用模块列表?

iphone - 将 UITextField 添加到 UITableViewCell 仅在最后一个单元格中显示一个 textField

ios - bitcode 是否支持弱链接第三方框架?

ios - WKWebKit View 在 iOS 10 上重叠状态栏,但在 iOS 11 上不重叠

ios - spritekit,纹理图像有时加载有时不加载

swift - 3D Touch Quick Actions 无法与 SpriteKit 一起正常工作

objective-c - 无法让粒子跟随 spriteKit 中的路径

iphone - 将pdf文件保存在设备中