如何从数组中随机筛选和选择CGPoint
问题描述:
我有一些CGPoint数组,如下面的方法所示。我试图为我的精灵过滤一个位置,该位置按照所述顺序向下,向左,向上和向右循环移动。如何从数组中随机选择一个数组(向下,向左等),然后从所选数组中随机选择一个点,并记录数组,以便当再次调用该方法时,将使用以下组进行生成(遵循循环顺序)。例如,因为down是循环中的第一个,所以随机选择一个“向下数组”,如果说,选择down2,那么应该从down2随机选择一个点,比如p5。下一次调用此方法时,应遵循“左数组”等相同的过程。这似乎相当复杂。如何从数组中随机筛选和选择CGPoint
func nextPosition()->CGPoint {
let down1 = [p1, p2]
let down2 = [p3, p4, p5]
let left1 = [p6, p7]
let left2 = [p8, p9, p10]
let left3 = [p11, p12, p13]
let up1 = [p14, p15]
let up2 = [p16, p17]
let up3 = [p18, p19]
let right1 = [p20, p21]
let right2 = [p22, p23]
let right3 = [p24, p25]
let right4 = [p26, p27, p28, p29, p30]
//return point
}
答
这应该工作:
func nextPosition() -> CGPoint {
var pointsArray:[[CGPoint]] = [[]]
let down1 = [p1, p2]
pointsArray.append(down1)
let down2 = [p3, p4, p5]
pointsArray.append(down2)
let left1 = [p6, p7]
pointsArray.append(left1)
let left2 = [p8, p9, p10]
pointsArray.append(left2)
let left3 = [p11, p12, p13]
pointsArray.append(left3)
let up1 = [p14, p15]
pointsArray.append(up1)
let up2 = [p16, p17]
pointsArray.append(up2)
let up3 = [p18, p19]
pointsArray.append(up3)
let right1 = [p20, p21]
pointsArray.append(right1)
let right2 = [p22, p23]
pointsArray.append(right2)
let right3 = [p24, p25]
pointsArray.append(right3)
let right4 = [p26, p27, p28, p29, p30]
pointsArray.append(right4)
let randomDirection: Int = Int(arc4random_uniform(UInt32(pointsArray.count)))
let randomPoint: Int = Int(arc4random_uniform(UInt32(pointsArray[randomDirection].count)))
return pointsArray[randomDirection][randomPoint]
}
我在做什么基本上是创建一个二维数组。第一个维度是针对方向的,第二个维度是针对该方向的。
答
试试这个。函数的返回值是一个由4个CGPoint组成的数组 - 接下来的四个点,每个方向之一,即第一个是下降点,下一个是左边点等。函数返回的示例可以是[p3, p7, p19, p25]
。
func nextPosition() -> [CGPoint] {
// Make a separate array for each group of points in each direction
let down1 = [p1, p2]
let down2 = [p3, p4, p5]
let left1 = [p6, p7]
let left2 = [p8, p9, p10]
let left3 = [p11, p12, p13]
let up1 = [p14, p15]
let up2 = [p16, p17]
let up3 = [p18, p19]
let right1 = [p20, p21]
let right2 = [p22, p23]
let right3 = [p24, p25]
let right4 = [p26, p27, p28, p29, p30]
// Make separate arrays for each direction which contains the previous arrays
let dArray = [down1, down2]
let lArray = [left1, left2, left3]
let uArray = [up1, up2, up3]
let rArray = [right1, right2, right3, right4]
// Make an array to group all the directions
let array = [dArray, lArray, uArray, rArray]
var nextPositions = [CGPoint]()
// loop through dArray, lArray etc.
for arr in array {
// pick random direction array
var length = UInt32(arr.count)
let random = Int(arc4random_uniform(length))
// pick random point from sub array
length = UInt32(arr[random].count)
let random2 = Int(arc4random_uniform(length))
// print final random point
print(arr[random][random2])
nextPositions.append(arr[random][random2])
}
return nextPositions
}
追加第一个数组应该是'up1'而不是'up11'。会建议编辑,但它只有一个字符。 –
对不起,错字,我修好了。 –
此功能也适用于从每个单点中选择一个随机变量,但不会按顺序返回4个不同点(从下向上,向左,向上和向右)。 –