我正在用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)。”我明白,不可能将该属性追加到我的数组中。关于如何避免这个问题的任何想法?
非常感谢您的帮助,我实际上尝试过这样做,但遗留问题很少。当你在其他地方说你的意思是在不同的班级,对吧? –