所以基本上我希望随机选择 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)
我是 swift 的新手,非常绝望,如果有人能帮助我,那就太棒了:)
谢谢
最佳答案
我很难在代码中找到您所说的数组。尽管如此,我仍然可以向您展示如何操作。
假设我们有一个[Int]
:
let ints = [10, 50, 95, 48, 77]
我们想从该数组中随机选择一个元素。
您可能已经知道,您可以使用带有元素索引的下标运算符来访问数组中的元素,例如ints[2]
返回 95
。所以如果你给下标一个随机索引,就会返回数组中的一个随机项!
让我们看看如何生成随机数。
arc4random_uniform
函数返回一个介于 0 和参数减一之间的均匀分布的随机数。请注意,此函数将 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]
}
注意,如果传入的数组为空,则返回nil
。
关于ios - 如何从 swift 中的一系列 Sprite 中进行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38731912/