我使用以下代码生成随机SKTexture并将其分配给SKSpriteNode。
var spriteTexture = [(SKTexture, String)]()
spriteTexture.append((SKTexture(imageNamed: "red"), "red"))
spriteTexture.append((SKTexture(imageNamed: "blue"), "blue"))
spriteTexture.append((SKTexture(imageNamed: "green"), "green"))
let rand = Int(arc4random_uniform(UInt32(spriteTexture.count)))
let chosenSprite = spriteTexture[rand].0 as SKTexture
let spriteName = spriteTexture[rand].1
let spriteSkin = chosenSprite
我使用此代码将SKTexture分配给SKSpriteNode。
let Sprite1 = SKSpriteNode(texture: spriteSkin)
let Sprite2 = SKSpriteNode(texture: spriteSkin)
代码工作正常并且始终生成随机图像...但是,Sprite1和Sprite2总是具有相同的随机图像!
如何确保每个SKSpriteNode都有自己的"随机"图像?
谢谢:D
答案 0 :(得分:0)
请记住,在iOS中(而不仅仅是在iOS中)是一种糟糕的态度,为您的财产提供大写字母。
您可以这样做:
let rand = randomNumber(0...(spriteTexture.count-1))
let chosenSprite = spriteTexture[rand].0 as SKTexture
let spriteName = spriteTexture[rand].1
let spriteSkin = chosenSprite
...
let sprite1 = SKSpriteNode()
if let skin = spriteSkin {
sprite1.texture = spriteSkin
}
func randomNumber(range: Range<Int> = 1...6) -> Int {
let min = range.startIndex
let max = range.endIndex
return Int(arc4random_uniform(UInt32(1 + max - min))) + min
}
根据您的意见:
通过创建全局var:
将精灵放入数组中var spritesArray : [SKSpriteNode]!
然后填充你的数组并启动一个scheduleTimer(在这个例子中它每10秒启动一次):
...
spritesArray = [sprites1,sprites2]
var changeTxtTimer = NSTimer.scheduledTimerWithTimeInterval(10.0, target: self, selector: Selector("changeTxt"), userInfo: nil, repeats: true)
func changeTxt() {
print("change textures...")
for sprite in spritesArray {
let rand = randomNumber(0...(spriteTexture.count-1))
let chosenSprite = spriteTexture[rand].0 as SKTexture
let spriteName = spriteTexture[rand].1
sprite.texture = chosenSprite
sprite.name = spriteName
}
}
答案 1 :(得分:0)
你的皮肤是平等的,因为你只有一个随机数。
func getRandomSkin () -> SKTexture {
let rand = Int(arc4random_uniform(UInt32(spriteTexture.count)))
let chosenSprite = spriteTexture[rand].0 as SKTexture
return chosenSprite
}
let randomSkin1 = getRandomSkin ()
let randomSkin2 = getRandomSkin ()
let sprite1 = SKSpriteNode(texture: randomSkin1)
let sprite2 = SKSpriteNode(texture: randomSkin2)
<强>更新强> 如果你想要这个名字:
func getRandomSkinNode () -> SKSpriteNode {
let rand = Int(arc4random_uniform(UInt32(spriteTexture.count)))
let chosenSprite = spriteTexture[rand].0 as SKTexture
let spriteName = spriteTexture[rand].1
let spriteNode = SKSpriteNode(texture: chosenSprite)
spriteNode.name = spriteName
return spriteNode
}
let sprite1 = getRandomSkinNode()
let sprite2 = getRandomSkinNode()