我在Xcode 9.2中使用Swift和SceneKit。我一直在使用NSColor
将颜色应用于几何体,但突然(渐渐地)我的大多数颜色都会使NSColor
类型没有成员.colorname
。就像我的游戏编译并运行得很好,然后在下一次编译时,我得到.cyan
的错误。我将其更改为.black
然后运行了。然后另一种颜色出错,然后大多数颜色出错。
以下是一个例子:
node.geometry?.firstMaterial?.diffuse.contents = NSColor.black
我留下的选项是:
.blue
,.green
,.int
,.rawValue
,.red
,.yellow
。
所有颜色都发生了什么?
编辑:我清理了项目,所有编译都没有警告,但我仍然只有4种颜色,它们都呈灰色。我将节点漫反射颜色打印到控制台,它们读取正确。我还导入了Cocoa框架。
编辑:我发现了我的错误。在执行查找和替换时,我意外地用NSColor
替换了枚举的名称。这就是SKColor
工作的原因,因为它是一个新名称。
我很尴尬。
答案 0 :(得分:1)
您可以使用:
node.geometry?.firstMaterial?.diffuse.contents = NSColor(srgbRed: 0, green: 0, blue: 0, alpha: 1.0)
通过这种方式,您可以使用自己的RGB值创建颜色,这样就可以使颜色变黑。最后一个参数alpha是不透明度的值,它需要为100才能看到颜色
答案 1 :(得分:1)
在您的情况下,更好的方法是使用以下语法:
NSColor(calibratedRed: 0.0, green: 0.0, blue: 0.0, alpha: 1.0)
在iOS中,您应该使用如下语法:
cube.firstMaterial?.diffuse.contents = UIColor(red: 0.3, green: 0.45, blue: 0.75, alpha: 1.0)
在macOS中,语法如下:
sphere.firstMaterial?.reflective.contents = NSColor(calibratedRed: 99.0, green: 0.0, blue: 0.0, alpha: 1.0)
请记住,alpha(又名不透明度),指定为0.0-1.0的值。低于0的Alpha值被解释为0.0,高于1.0的值被解释为1.0。
当然,您可以明确指定颜色空间(如sRGB
):
init(srgbRed: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat)