我正在尝试在 2d swift 游戏中模拟一个循线机器人。
现在这是到目前为止的截图:
黄色的东西是机器人,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/