У меня есть игровое меню, которое отображает несколько достижений, которые определены как SKSpriteNodes есть 18 из них, и они имеют лишь небольшие изменения в позиционировании, вот фрагмент кода:создание нескольких экземпляров спрайтов с небольшими вариациями?
Achievement1 = SKSpriteNode(color: SKColor.whiteColor(), size: CGSize(width: 100, height: 100))
Achievement1.position = CGPointMake(-120, 100)
page1ScrollView.addChild(Achievement1)
Achievement2 = SKSpriteNode(color: SKColor.whiteColor(), size: CGSize(width: 100, height: 100))
Achievement2.position = CGPointMake(0, 100)
page1ScrollView.addChild(Achievement2)
Achievement3 = SKSpriteNode(color: SKColor.whiteColor(), size: CGSize(width: 100, height: 100))
Achievement3.position = CGPointMake(120, 100)
page1ScrollView.addChild(Achievement3)
Achievement4 = SKSpriteNode(color: SKColor.whiteColor(), size: CGSize(width: 100, height: 100))
Achievement4.position = CGPointMake(-120, -25)
page1ScrollView.addChild(Achievement4)
Кроме того, я пошел на большой длины, чтобы определить, все они один за другим, как вары, как показано здесь:
var Achievement1: SKSpriteNode!
var Achievement2 = SKSpriteNode()
var Achievement3 = SKSpriteNode()
var Achievement4 = SKSpriteNode()
var Achievement5 = SKSpriteNode()
var Achievement6 = SKSpriteNode()
var Achievement7 = SKSpriteNode()
var Achievement8 = SKSpriteNode()
Это выглядит как полный беспорядок и просто занимает слишком много места. Я хочу, чтобы иметь возможность определить все спрайтов узлов и иметь их все в состоянии быть нажата, чтобы отобразить окно, в котором говорится, что достижение для так:
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
let touch: UITouch = touches.first!
let location: CGPoint = touch.locationInNode(self)
let node: SKNode = self.nodeAtPoint(location)
if (node == Achievement1) {
//achievement details here
}
Я еще новичок в этом быстром языке и Я не очень продвинутый, но я был бы признателен за помощь.
Это все еще позволяет мне использовать узлы, созданные в моем методе touchhesbegan? – Astrum
@Astrum Да, конечно! Чтобы проверить, является ли 'node' первым достижением, используйте' node == someArray [0] '! Чтобы проверить второе достижение, используйте 'node == someArray [1]'. Вы можете понять все остальное! – Sweeper
@Astrum Вы также можете использовать метод 'index (of:)', упомянутый Grimxn в его ответе. Но если вы используете Swift 2.x, вместо этого используйте 'indexOf (_ :)'. – Sweeper