macos - 使用gradientColors从GKNoise创建SKTexture时颜色 "not valid for the NSColor Generic Gray Gamma"

标签 macos sprite-kit macos-big-sur gameplay-kit

这个基本代码在我尝试添加gradientColors之前一直有效:

let noise = GKNoise(src)
noise.gradientColors = [ 0.0: NSColor.blue, 0.5: NSColor.green, 0.75: NSColor.white]
let map = GKNoiseMap(noise,
                     size: vector_double2(x: inParams.noiseSize, y: inParams.noiseSize),
                     origin: vector_double2(x:0, y:0),
                     sampleCount: vector_int2(x: Int32(inParams.size), y:Int32(inParams.size)),
                     seamless: true)
let tex = SKTexture(noiseMap: map)

此时,在创建 SKTexture 后,我在 Xcode 控制台中得到以下信息:

*** -getRed:green:blue:alpha: not valid for the NSColor Generic Gray Gamma 2.2 Profile colorspace 1 1; need to first convert colorspace.

其他人似乎能够做到这一点,所以我不确定我在做什么不同。我不知道在哪里可以设置色彩空间。

macOS 11.3、Xcode 12.5、SwiftUI 应用。

最佳答案

GameplayKit 会在幕后对每个 NSColor 实例调用 getRed(_:green:blue:alpha:),并根据 documentation ,此方法仅适用于 caliblatedRGBdeviceRGB 颜色空间中的颜色(尽管它似乎也适用于其他空间,例如 sRGB)。

NSColor.blueNSColor.green 默认使用 sRGB,但 .white 使用 NSColorSpace.genericGray。转换:

let white = NSColor.white.usingColorSpace(.sRGB)!

或者,直接用其组件实例化颜色,例如NSColor(red: 1, green: 1, blue: 1, alpha: 1),将其放入 sRGB。

关于macos - 使用gradientColors从GKNoise创建SKTexture时颜色 "not valid for the NSColor Generic Gray Gamma",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67314642/

相关文章:

Swift 3 太空射击游戏 : Issue with bullet collision

macos - 无法使用应用 Proxifier : protocol wrong type for socket 监听 macOS Big Sur 上的任何 TCP 端口

mongodb - 在 Mac Big Sur 中安装 mongodb 失败

linux - 如何在 MacOS 和 Linux 上的 Node 中启动子进程

macos - 以独立于平台的方式从 IP 地址中查找 MacAddress

java - macOS 上的 Eclipse 安装

list - 如何找到 Homebrew 的可安装包列表?

ios - Spritekit SKNode 大小百分比

sprite-kit - spritekit ios9 fps 下降

macos - 在 macOS Big Sur 上安装 cocoa pod 时出错