所以基本上我想随机选择4个不同颜色的球中的一个进入场景,每个场景都有动画,物理特性和动作。我已编码的间距。我不确定如何制作阵列然后从4个彩球的阵列中随机选择,以便我随机选择一个球进入场景。 为了更清楚地说明我在这里要问的是一些代码(我在这段代码中只使用了两个球,所以你不必阅读那么多):
var moveandremove = SKAction()<这是我的ballScene.swift
spawn runBlock位于didMovetoView
中让spawn = SKAction.runBlock({ ()
self.allballs()
})
let delay = SKAction.waitForDuration(2.0)
let SpawnDelay = SKAction.sequence([spawn, delay])
let spawndelayforever = SKAction.repeatActionForever(SpawnDelay)
self.runAction(spawndelayforever)
let distance = CGFloat(brnball.frame.width * 20 + brnball.frame.width)
let moveball = SKAction.moveByX(-distance, y: 0, duration: NSTimeInterval(0.003 * distance))
let removeball = SKAction.removeFromParent()
moveandremove = SKAction.sequence([moveball])
}
func allballs() {
TextureAtlasblk = SKTextureAtlas(named: "blkball")
for i in 1...TextureAtlasblk.textureNames.count{
var Name = "blkball_\(i)"
blkarray.append(SKTexture(imageNamed: Name))
}
blkball = SKSpriteNode(imageNamed: "blkball_1")
blkball.position = CGPoint(x: CGRectGetMidX(self.frame) + 100, y: CGRectGetMidY(self.frame))
blkball.zPosition = 7
blkball.setScale(0.1)
self.addChild(blkball)
blkball.runAction(SKAction.repeatActionForever(SKAction.animateWithTextures(blkarray, timePerFrame: 0.2)))
//brownball
TextureAtlasbrn = SKTextureAtlas(named: "brnball")
for i in 1...TextureAtlasbrn.textureNames.count{
var Name = "brnball_\(i)"
brnarray.append(SKTexture(imageNamed: Name))
}
brnball = SKSpriteNode(imageNamed: "brnball_1")
brnball.position = CGPoint(x: CGRectGetMidX(self.frame) + 50, y: CGRectGetMidY(self.frame))
brnball.zPosition = 7
brnball.setScale(0.1)
self.addChild(brnball)
brnball.runAction(SKAction.repeatActionForever(SKAction.animateWithTextures(brnarray, timePerFrame: 0.2)))
这是我尝试从每个球中选择阵列的可怕起点(这是在我的allballs()函数中):
var ballarray:NSMutableArray = [blkball,brnball,yelball,bluball]
runAction(moveandremove)
我是新手,很快就会毫无希望,如果有人可以帮助我的话会很棒:)
由于
答案 0 :(得分:1)
我很难找到您在代码中谈论的数组。但是,我仍然可以告诉你如何。
我们说我们有print subsets([1,2,3])
appending []
ans: [[]]
appending [3]
ans: [[3], [3]]
appending [2]
ans: [[2], [2], [2]]
appending [2, 3]
ans: [[2, 3], [2, 3], [2, 3], [2, 3]]
appending [1]
ans: [[1], [1], [1], [1], [1]]
appending [1, 3]
ans: [[1, 3], [1, 3], [1, 3], [1, 3], [1, 3], [1, 3]]
appending [1, 2]
ans: [[1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2]]
appending [1, 2, 3]
ans: [[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]
[[], [], [], [], [], [], [], []]
:
[Int]
我们希望获得该数组中随机选择的元素。
您可能已经知道,使用带有元素索引的下标运算符来访问数组中的元素,例如let ints = [10, 50, 95, 48, 77]
返回ints[2]
。因此,如果您为下标提供随机索引,则会返回数组中的随机项!
让我们看看我们如何生成一个随机数。
95
函数返回0到1之间参数的均匀分布的随机数。请注意,此函数将arc4random_uniform
作为参数,返回值的类型相同。所以你需要做一些演员:
UInt32
使用let randomNumber = Int(arc4random_uniform(UInt32(ints.count)))
,我们可以访问数组中的随机元素:
randomNumber
尝试将此技术应用于您的情况。
以下是执行此操作的通用方法:
let randomItem = ints[randomNumber]
请注意,如果传入的数组为空,则返回func randomItemInArray<T> (array: [T]) -> T? {
if array.isEmpty {
return nil
}
let randomNumber = Int(arc4random_uniform(UInt32(array.count)))
return array[randomNumber]
}
。
答案 1 :(得分:0)
您可以为返回随机元素的Array创建和扩展。
extension Array {
func randomElement() -> Element {
let i = Int(arc4random_uniform(UInt32(count - 1)))
return self[i]
}
}
您可以更进一步,并允许将函数直接应用于随机元素。
mutating func randomElement(perform: (Element) -> Element) {
let i = Int(arc4random_uniform(UInt32(count - 1)))
self[i] = perform(self[i])
}
使用引用类型数组时可以使用此函数。
func randomElement(perform: (Element) -> ()) {
let i = Int(arc4random_uniform(UInt32(count - 1)))
perform(self[i])
}