随机生成SKTexture到多个SKNode给出相同的输出

时间:2016-07-26 09:43:49

标签: swift sprite-kit

我使用以下代码生成随机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

2 个答案:

答案 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()