SCNNode:每个单独节点的随机颜色,不是全部? - Swift, SceneKit
SCNNode: Random color for each individial node, not all? - Swift, SceneKit
如果我有一个函数,只要用户点击屏幕并更改立方体的颜色,就会在前一个立方体旁边生成一个立方体,我如何才能确保每个立方体都能变成随机颜色,并且不是所有的立方体都变成相同的随机颜色吗?我不认为我可以为每个立方体使用相同的几何形状,因为那样它会继承我最初给它的任何 material。我希望每个生成的立方体 select 都有自己的随机颜色,而不是所有的立方体 select 都是它在点击时选择的相同随机颜色。我有一个随机颜色函数,它可以工作。但是如果我生成 5 个立方体,然后点击屏幕,所有 5 个立方体都会变成相同的随机颜色。但是相反,我希望每个单独的立方体都有自己的随机颜色。我正在使用 Swift 和 SceneKit。提前感谢您的帮助。
func randomColor2() -> UIColor{
let red = CGFloat(drand48())
let green = CGFloat(drand48())
let blue = CGFloat(drand48())
return UIColor(red: red, green: green, blue: blue, alpha: 1.0)
}
现在我就说,我内心的触动开始了:
boxNodeMaterial.diffuse.contents = randomColor2
我还调用了我的 createBox 函数,该函数在原始框旁边添加了另一个框节点。我想让第二个盒子选择它自己的随机颜色,而不是与原来的颜色相同。我希望对添加的每个框继续执行此操作。方框 1 可以是红色、绿色或蓝色。方框 2 可以是红色、绿色或蓝色,方框 3 等等。 NOT Box 1, Box 2, Box 3 以红色为例,让它们都变成相同的颜色。
您似乎创建了多个 SCNGeometry
,但它们都共享同一个 material。
这会导致您描述的问题:更改一个 material 的颜色会更改所有框的颜色。
为避免这种情况,只需在每次创建新框时创建一个新的 SCNMaterial
。
//Create a new, unique material for each box
let material = SCNMaterial()
material.diffuse.contents = randomColor2()
//Copy the box (or create a new one)
let newBox = oldBox.copy()
newBox.firstMaterial = material
如果我有一个函数,只要用户点击屏幕并更改立方体的颜色,就会在前一个立方体旁边生成一个立方体,我如何才能确保每个立方体都能变成随机颜色,并且不是所有的立方体都变成相同的随机颜色吗?我不认为我可以为每个立方体使用相同的几何形状,因为那样它会继承我最初给它的任何 material。我希望每个生成的立方体 select 都有自己的随机颜色,而不是所有的立方体 select 都是它在点击时选择的相同随机颜色。我有一个随机颜色函数,它可以工作。但是如果我生成 5 个立方体,然后点击屏幕,所有 5 个立方体都会变成相同的随机颜色。但是相反,我希望每个单独的立方体都有自己的随机颜色。我正在使用 Swift 和 SceneKit。提前感谢您的帮助。
func randomColor2() -> UIColor{
let red = CGFloat(drand48())
let green = CGFloat(drand48())
let blue = CGFloat(drand48())
return UIColor(red: red, green: green, blue: blue, alpha: 1.0)
}
现在我就说,我内心的触动开始了:
boxNodeMaterial.diffuse.contents = randomColor2
我还调用了我的 createBox 函数,该函数在原始框旁边添加了另一个框节点。我想让第二个盒子选择它自己的随机颜色,而不是与原来的颜色相同。我希望对添加的每个框继续执行此操作。方框 1 可以是红色、绿色或蓝色。方框 2 可以是红色、绿色或蓝色,方框 3 等等。 NOT Box 1, Box 2, Box 3 以红色为例,让它们都变成相同的颜色。
您似乎创建了多个 SCNGeometry
,但它们都共享同一个 material。
这会导致您描述的问题:更改一个 material 的颜色会更改所有框的颜色。
为避免这种情况,只需在每次创建新框时创建一个新的 SCNMaterial
。
//Create a new, unique material for each box
let material = SCNMaterial()
material.diffuse.contents = randomColor2()
//Copy the box (or create a new one)
let newBox = oldBox.copy()
newBox.firstMaterial = material