ios image swift sprite-kit skspritenode

ios - Elegir una imagen aleatoria para SKSpriteNode



swift sprite-kit (2)

Estoy tratando de construir una aplicación de salto de obstáculos simple. Quiero que la imagen del obstáculo se recoja al azar de un conjunto de imágenes. He intentado usar una combinación de la función arc4random_uniform y la caja del interruptor, pero eso no parece actualizar el SKSpriteNode. ¿Qué estoy haciendo mal?

class PlayScene: SKScene, SKPhysicsContactDelegate{ ... var block3 = SKSpriteNode(imageNamed: "lion") .... } override func update(currentTime: NSTimeInterval) { ..... blockRunner() } func blockRunner() { var imageNamedAnimal = "" var randomIndex = arc4random_uniform(2) switch(randomIndex) { case 0 : imageNamedAnimal = "turtle" case 1: imageNamedAnimal = "lion" default: imageNamedAnimal = "turtle" } block3 = SKSpriteNode(imageNamed: imageNamedAnimal) ..... }

¿En qué punto debo tratar de establecer la imagen aleatoria? Block3 parece elegir la imagen de león que siempre he enviado al principio del código, a pesar de que imageNamedAnimal muestra valores aleatorios en cada fotograma.


Está creando un nuevo SKSpriteNode cuando llama al inicializador, pero nunca lo agrega a la vista. En cambio, puedes cambiar la imagen en el sprite configurando su textura, como esta:

block3.texture = SKTexture(imageNamed: imageNamedAnimal)


Puede evitar cargar las imágenes cada vez que cambie el personaje creando y almacenando las imágenes como texturas. Aquí hay un ejemplo de cómo hacer eso:

Crear una matriz para almacenar las texturas

var textures = [SKTexture]()

En didMoveToView , crea y almacena las texturas

textures.append(SKTexture(imageNamed: "turtle")) textures.append(SKTexture(imageNamed: "lion")) textures.append(SKTexture(imageNamed: "rhino")) ...

En el método blockRunner , agregue lo siguiente

// Randomly select a character let rand = Int(arc4random_uniform(UInt32(textures.count))) let texture = textures[rand] as SKTexture block3.texture = texture // Optionally, resize the sprite block3.size = texture.size()