2016-08-17 4 views
0

ユーザーが画面をタップしてキューブの色を変更するたびに、直前のキューブのすぐ隣にキューブを生成する機能がある場合、各キューブがランダムな色になるようにするにはどうすればよいですかすべてのキューブが同じランダムな色になるわけではありませんか?私は各キューブに同じジオメトリを使用することはできないと思います。なぜなら、最初に与えた素材を継承するからです。私は、生成された各キューブが、それ自身のランダムな色を選択するようにしたいが、すべてのキューブがタップするときに選択するのと同じランダムな色を選択するわけではない。私はランダムな色の機能を持っています。しかし、私が5つの立方体をスポーンし、画面をタップすると、5つの立方体すべてが同じランダムな色になります。しかし、代わりに、私は個々のキューブをそれぞれ独自のランダムな色にしたい。私はSwiftとSceneKitを使用しています。あなたの助けを前もってありがとう。SCNNode:個々のノードごとにランダムな色で、すべてではありませんか? - Swift、SceneKit

boxNodeMaterial.diffuse.contents = randomColor2 

そして私はまた、元のボックスの横に別のボックスノードを追加し、私のcreateBox関数を呼び出す:

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) 
} 

今、私はちょうど言う、私のタッチの内側が始まりました。この2番目のボックスには、元のものと同じものではなく、それ自身のランダムな色を選択します。私は、これが追加されるボックスごとにこれを続けたいと思っています。ボックス1は赤、緑、青のいずれかです。ボックス2は、赤、緑、または青、ボックス3などとすることができる。ボックス1、ボックス2、ボックス3ではなく、例えば赤色を選択して、それらをすべて同じ色にします。

答えて

2

あなたは、複数のSCNGeometryを作成するように見えるが、それらのすべてが同じ材料を共有しています。 これは、あなたが記述している問題を引き起こします:1つのマテリアルの色を変更すると、すべてのボックスの色が変わります。

これを避けるには、新しいボックスを作成するたびに新しい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 
関連する問題