2015-07-19 3 views
0

У меня есть spriteNode, который имеет текстуру по умолчанию черного круга, и я поместил ее в центр экрана. У меня также есть массив, который содержит 4 текстуры. То, что я хочу сделать, - это когда я нажимаю на экран, черный круг в центре случайно выбирает SKTexture из массива и меняет структуру текстуры. Я думал о длинных строках кода в didBeginTouches, но я зациклился на том, как действительно выполнить эту идею. Спасибо за любую помощь. :)Xcode6 Swift. arc4random using array with textures

var array = [SKTexture(imageNamed: "GreenBall"), SKTexture(imageNamed: "RedBall"), SKTexture(imageNamed: "YellowBall"), SKTexture(imageNamed: "BlueBall")] 

override func didMoveToView(view: SKView) { 

    var choiceBallImg = SKTexture(imageNamed: "BlackBall") 

    choiceBall = SKSpriteNode(texture: choiceBallImg) 

    choiceBall.position = CGPointMake(self.frame.size.width/2, self.frame.size.height/2) 

    self.addChild(choiceBall) 

} 

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { 

    choiceBall.texture = SKTexture(imageNamed: arc4random(array)) 

    //error: Cannot assign a value of type 'SKTexture!' to a value of type 'SKTexture?' 

} 

ответ

1

Почти там, изменить свой touchesBegan к этому:

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { 
     let randomIndex = Int(arc4random_uniform(UInt32(array.count))) 
     choiceBall.texture = array[randomIndex] 
    } 

Первая линия генерирует случайное число в диапазоне от 0 до размера вашего массива-1 с использованием функции arc4random_uniform. Нам также нужно преобразовать размер вашего массива в Unsigned Integer, потому что Swift очень строгий (и это справедливо). Затем мы возвращаем его обратно в Integer и используем его для доступа к текстурам, которые вы уже создали в своем массиве.