我正在使用 SpriteKit
和 Swift 3
创建一个简单的游戏。
我有一组环/圆:
mRings = [mRingOne, mRingTwo, mRingThree, mRingFour, mRingFive]
数组中的每个对象都有不同的颜色,在游戏中的某些时候我想改变每个环的颜色,但我有两个条件可以实现: 1. 一枚戒指不应该有它之前迭代的颜色。 2. 每个戒指的颜色应该与其他戒指不同。
对于第一个条件,我这样做了:
func changeRingsColor(){
var previousColor: UIColor?
for ring in mRings {
previousColor = ring.fillColor
repeat{
ring.fillColor = hexStringToUIColor(hex: mColors[Int(arc4random_uniform(UInt32(5)))])
}while(ring.fillColor.isEqual(previousColor))
}
}
它正在运行,但是,我想不出一种方法来回答第二个条件。
在 Java
中,我可能会这样做:
for (int i=0; i<mRings.length; i++){
for( int j=1; j<mRings.length; j++){
if (ring[i].fillColor == ring[j].fillColor){
generate another color for 'j' ring.
}
}
}
但我没有尝试过。 希望你们能帮助我,在此先感谢!
顺便说一句,mColors
是 5 种不同颜色的数组,我从那里挑选颜色。
最佳答案
我将忽略一些实现细节并关注问题的核心,即:
- 遍历一个数组
- 在每个循环中,从当前索引开始一个新循环,直到数组末尾。
如果我对上述内容有误解,请告诉我。但我会这样做:
for (index, ring) in mRings.enumerated() {
let remainingRings = mRings[index+1..<mRings.count]
for otherRing in remainingRings {
print("Now comparing \(ring) to \(otherRing)")
}
}
首先,enumerated()
在第一个 for 循环的每次迭代中为您提供当前环和索引。然后,我们将数组从当前索引切片到末尾 (remainingRings
),并循环遍历这些数组。
关于arrays - 数组上的嵌套 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41635216/