2015-08-03 2 views
1

Я строю свою первую быструю игру, и у меня возникают трудности с реализацией жизни для игрока. он должен отображать три жизни в разных положениях экрана, например миниатюрное изображение ... Я знаю, что цикл for может выполнять эту работу, но я не уверен, как ее записать. Когда я пытаюсь добавить тот же спрайт на экран с помощью addChild (LifeIndex), он выдает ошибку.Добавление спрайтов в sprites в SpriteKit с Swift

здесь следующий код:

// Add Life to player 

    let lifeIndex = SKSpriteNode(imageNamed: "bullet.png") 

    var lifeCount = 3 

    lifeIndex.position = CGPoint(x: self.frame.size.width * -1.5, y: self.frame.size.height * 0.1) 

    let lifeIndexMove = SKAction.moveTo(CGPoint(x: size.width * 0.1, y: size.height * 0.1), duration: NSTimeInterval(0.7)) 

    let lifeIndexRotation = SKAction.rotateByAngle(CGFloat(-2 * M_PI), duration: 0.3) 

    addChild(lifeIndex) 

    lifeIndex.runAction(SKAction.sequence([lifeIndexMove, lifeIndexRotation])) 

Как я могу сделать это три раза? Кроме того, мне нужны разные точки в moveTo, поэтому они могут быть бок о бок, а не друг на друга.

+1

положить все, что в течение цикл, который циклы lifCount количество раз. Будет ли жизньIndexMove и lifeIndexRotation одинаковой для всех трех? – Steve

+0

lifeIndexRotation будет одинаковой, но мне нужно приращение в x-параметре lifIndexMove, чтобы оно могло быть рядом с другими спрайтами. –

ответ

2

попробовать это:

// Add Life to player 

    var lifeIndexCount = 0 
    var positionAdd:CGFloat = 10.0 

    for lifeIndexCount in 0..<3 { 

     let lifeIndex = SKSpriteNode(imageNamed: "bullet.png") 

     lifeIndex.position = CGPoint(x: self.frame.size.width * -1.5, y: self.frame.size.height * 0.1) 

     let lifeIndexMove = SKAction.moveTo(CGPoint(x: (size.width * 0.1) + positionAdd, y: size.height * 0.1), duration: NSTimeInterval(0.7)) 

     let lifeIndexRotation = SKAction.rotateByAngle(CGFloat(-2 * M_PI), duration: 0.3) 

     lifeIndex.runAction(SKAction.sequence([lifeIndexMove, lifeIndexRotation])) 

     addChild(lifeIndex) 

     positionAdd = positionAdd + 30.0 

    } 
+0

Он получает небольшие ошибки компиляции, но их легко решить. Самая большая проблема заключается в addChild (lifeIndex), который вызывает ошибку. –

+0

обновленный код try moving var lifeIndex = SKSpriteNode (imageNamed: "bullet.png") внутри цикла. Если это не сработает, я удалю ответ, пока я не смогу правильно проверить мой предложенный ответ – Steve

+0

те же ошибки компиляции, и LifeIndex должен быть типом let, но да, решил основную проблему, которая была сбой в методе addChild. Благодаря! –

2

не могли бы вы просто создать три nodes и расположите первый так:

lifeIndex.position = CGPoint(x: self.frame.size.width * -1.5, y: self.frame.size.height * 0.1) 

второй

lifeIndex2.position = CGPoint(x: self.frame.size.width * -1.5 + lifeIndex2.size.width * 1.5, y: self.frame.size.height * 0.1) 

и третий

lifeIndex3.position = CGPoint(x: self.frame.size.width * -1.5 + lifeIndex2.size.width * 3, y: self.frame.size.height * 0.1) 

Я думаю, что это должны расположить их прямо рядом друг с другом.

Я думаю, что это проще для вас, чтобы сделать это таким образом, вместо того, чтобы создать FUNC и порождая три аналогичных узлов

Смежные вопросы