我正在尝试构建一个简单的障碍跳跃应用程序。我希望从一组图像中随机挑选障碍物的图像。我尝试过使用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在每个帧中显示随机值。
答案 0 :(得分:0)
当您调用初始值设定项时,您正在创建新的SKSpriteNode,但您从未将其添加到视图中。相反,您可以通过设置其纹理来更改精灵中的图像,如下所示:
block3.texture = SKTexture(imageNamed: imageNamedAnimal)
答案 1 :(得分:0)
通过创建和存储图像作为纹理,每次更改角色时都可以避免加载图像。以下是如何执行此操作的示例:
创建一个数组来存储纹理
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()