【问题标题】:SCNNode: Random color for each individial node, not all? - Swift, SceneKitSCNNode:每个单独节点的随机颜色,不是全部? - 斯威夫特,SceneKit
【发布时间】:2016-12-24 18:41:01
【问题描述】:

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

【问题讨论】:

    标签: ios swift random colors scenekit


    【解决方案1】:

    您似乎创建了多个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
    

    【讨论】:

      猜你喜欢
      • 2016-06-01
      • 2017-01-01
      • 2018-02-20
      • 1970-01-01
      • 2017-07-22
      • 2017-03-24
      • 2016-10-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多