我正在用SceneKit開發一個簡單的遊戲。在創建了一個nxn的球體網格(每個球體具有五種隨機顏色之一)之後,玩家將連續選擇其中的三個,並且如果它們具有相同的顏色,那麼它們將從網格中移除。我對代碼的選擇部分很滿意,但我無法設法比較三人組合的顏色來檢查它是否有效。我使用的功能是比較SceneKit中不同物體的顏色
func respondToPanGesture(gesture: UIGestureRecognizer) {
var colorsTrio = Array<NSObject>()
var numberOfWhiteSpheres: Int {
var count = 0
for child in scnView.scene!.rootNode.childNodes {
let materials = child.geometry?!.materials as! [SCNMaterial]
let material = materials[0]
if material.diffuse.contents as! NSObject == UIColor.whiteColor(){
count++
}
}
return count
}
if let panGesture = gesture as? UIPanGestureRecognizer {
let location = gesture.locationInView(scnView)
let hitResults = scnView.hitTest(location, options: nil)
if hitResults?.count > 0 && (numberOfWhiteSpheres < 3) {
let result = hitResults![0] as! SCNHitTestResult
let node = result.node
SCNTransaction.begin()
SCNTransaction.setAnimationDuration(1.0)
let materials = node.geometry?.materials as! [SCNMaterial]
let material = materials[0]
colorsTrio.append(material.diffuse.contents as! [UIColor])
material.diffuse.contents = UIColor.whiteColor()
SCNTransaction.commit()
}
}
}
的想法是我的球的顏色屬性存儲在一個數組,然後使用另一個函數比較。我可以成功構建程序,但是一旦我開始選擇其中一個球體,我遇到以下錯誤:「無法將類型'UICachedDeviceRGBColor'(0x101ebfd80)的值轉換爲'NSArray'(0x100af4470)。」我明白,不可能將該屬性追加到我的數組中。關於如何避免這個問題的任何想法?
非常感謝您的幫助,我實際上嘗試過這樣做,但遺留問題很少。當你在其他地方說你的意思是在不同的班級,對吧? –