为SKSpriteNode选择随机图像

我正在尝试构建一个简单的障碍跳跃应用程序。 我希望从一组图像中随机挑选障碍物的图像。 我试过使用arc4random_uniform函数和switch case的组合,但似乎没有更新SKSpriteNode。 我究竟做错了什么?

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) ..... } 

我应该在什么时候尝试设置随机图像? Block3似乎总是选择我在代码开头发送的狮子图像,尽管imageNamedAnimal在每个帧中显示随机值。

通过创建和存储图像作为纹理,您可以避免每次更改角色时加载图像。 这是一个如何做到这一点的例子:

创建一个数组来存储纹理

 var textures = [SKTexture]() 

didMoveToView ,创建并存储纹理

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

blockRunner方法中,添加以下内容

  // 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() 

您在调用初始化程序时创建了一个新的SKSpriteNode,但您从未将其添加到视图中。 相反,您可以通过设置其纹理来更改精灵中的图像,如下所示:

 block3.texture = SKTexture(imageNamed: imageNamedAnimal)