SCNNode:每个单独节点的随机颜色,不是全部? - Swift,SceneKit

时间:2016-08-17 23:50:41

标签: ios swift random colors scenekit

如果我有一个函数,只要用户点击屏幕并改变立方体的颜色,就会在前一个立方体旁边生成一个立方体,我怎样才能确保每个立方体都可以变成随机颜色而不是所有立方体变成相同的随机颜色?我不认为我可以为每个立方体使用相同的几何体,因为它会继承我最初给它的任何材料。我希望生成的每个立方体都选择自己的随机颜色,而不是所有的立方体选择与攻丝时相同的随机颜色。我有一个随机颜色功能,它的工作原理。但如果我产生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选择红色,并使它们颜色相同。

1 个答案:

答案 0 :(得分:2)

您似乎创建了多个SCNGeometry,但它们共享相同的材料。 这会导致您所描述的问题:更改一种材质的颜色会更改为所有框的颜色。

要避免这种情况,只需在每次创建新框时创建一个新的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