swift - 我的sprite kit游戏怎么获取3个点的颜色数据?

标签 swift sprite-kit cgimage

我正在尝试在 2d swift 游戏中模拟一个循线机器人。

现在这是到目前为止的截图:screenshot

黄色的东西是机器人,3 个透明圆圈应该是它的传感器。

现在我希望能够获取那 3 个透明圆圈中心像素的颜色数据。因为我想知道这三个“传感器”是在“感应”红线还是白色背景。但对于我的生活,我不知道该怎么做。

我在 stackoverflow 上找到了这段代码(对其进行了一些修改以适合我的项目):

extension SKTexture {
    func getPixelColor(pos: CGPoint) -> SKColor {

        let pixelData = CGDataProviderCopyData(CGImageGetDataProvider(self.CGImage))
        var 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 SKColor(red: r, green: g, blue: b, alpha: a)
    }
}

但是当我调用该函数时,我得到:

2015-06-22 02:47:04.012 SKTryout[16325:1119579] -[SKTexture CGImage]: unrecognized selector sent to instance 0x6080001c0690
2015-06-22 02:47:04.016 SKTryout[16325:1119579] -[SKTexture CGImage]: unrecognized selector sent to instance 0x6080001c0690
2015-06-22 02:47:04.054 SKTryout[16325:1119579] (
    0   CoreFoundation                      0x00007fff88cec03c __exceptionPreprocess + 172
    1   libobjc.A.dylib                     0x00007fff81f0e76e objc_exception_throw + 43
    2   CoreFoundation                      0x00007fff88cef0ad -[NSObject(NSObject) doesNotRecognizeSelector:] + 205
    3   CoreFoundation                      0x00007fff88c34e24 ___forwarding___ + 1028
    4   CoreFoundation                      0x00007fff88c34998 _CF_forwarding_prep_0 + 120
    5   SKTryout                            0x0000000100003669 _TFE8SKTryoutCSo9SKTexture13getPixelColorfS0_FVSC7CGPointCSo7NSColor + 57
    6   SKTryout                            0x0000000100003a86 _TToFE8SKTryoutCSo9SKTexture13getPixelColorfS0_FVSC7CGPointCSo7NSColor + 54
    7   SKTryout                            0x000000010000139c _TFC8SKTryout9GameScene7keyDownfS0_FCSo7NSEventT_ + 444
    8   SKTryout                            0x00000001000013fa _TToFC8SKTryout9GameScene7keyDownfS0_FCSo7NSEventT_ + 58
    9   SpriteKit                           0x0000000100041fc4 -[SKView keyDown:] + 67
    10  AppKit                              0x00007fff8ea0e11b -[NSWindow _reallySendEvent:isDelayedEvent:] + 5452
    11  AppKit                              0x00007fff8e39fd76 -[NSWindow sendEvent:] + 470
    12  AppKit                              0x00007fff8e39c9b1 -[NSApplication sendEvent:] + 4199
    13  AppKit                              0x00007fff8e2c5c68 -[NSApplication run] + 711
    14  AppKit                              0x00007fff8e242354 NSApplicationMain + 1832
    15  SKTryout                            0x0000000100002ef7 main + 87
    16  libdyld.dylib                       0x00007fff84bf35c9 start + 1

谁能告诉我应该怎么做?

顺便说一句,以防万一,我在 XCode 7 (Beta) 和 Swift 2 中执行此操作。

最佳答案

CGImage 方法仅在 iOS 9/OS X 10.11 中引入到 SKTexture 中。你没有运行 OS X 10.11——你仍然回到 OS X 10.10——所以你的机器上不存在这个方法。

关于swift - 我的sprite kit游戏怎么获取3个点的颜色数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30970894/

相关文章:

ios - Swift:闭包、完成处理程序和函数之间的区别?

swift - ZeroMQ:即使在 poller.poll( pollIn) 之后,使用 SwiftyZeroMQ .recv() 的 swift 代码仍然会阻止 GUI 文本更新

ios - 如何获得移动的 SKSpriteNode 的位置?

ios - 将 CIImage 转换为 CGImage 太慢

带有视网膜的 Swift CGContext

ios - Facebook LoginManager 回调/PrepareforSegue Swift

ios - Xcode7 swift2 - 双击 MKMapView 不工作

ios - 如何在某个SKScene上显示iAd并在另一个SKScene上隐藏它

swift - 防止 SKPhysicsBody 向上插入 SKSpriteNode

ios - 如何创建有限的 CIImage?