2016-08-17 63 views
0

如果我有一個函數,當用戶點擊屏幕並改變立方體的顏色時,立即在前一個立方體旁邊產生一個立方體,我怎樣才能確保每個立方體可以變成隨機顏色而不是所有的立方體變成相同的隨機顏色?我不認爲我可以爲每個立方體使用相同的幾何體,因爲它會繼承我原來給它的任何材質。我希望生成的每個立方體都選擇自己的隨機顏色,而不是所有的立方體都選擇與點擊時相同的隨機顏色。我有一個隨機的顏色功能,它的工作原理。但如果我產生5個立方體,並點擊屏幕,所有5個立方體變成相同的隨機顏色。但是,我想讓每個獨立的立方體成爲它自己的隨機顏色。我正在使用Swift和SceneKit。感謝您的幫助提前。SCNNode:每個個體節點的隨機顏色,不是全部? - 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等等。不是方框1,方框2,方框3,例如選擇紅色,並使它們具有相同的顏色。

回答

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