2016-10-21 2 views
0

Я создал тестовую сцену, чтобы попрактиковаться в некоторых простых Swift 3 и SpriteKit. Я пытаюсь учиться, понимая основы, прежде чем переходить к более сложным целям.Перемещение SKLabelNode. Но действие не повторяется

Здесь у меня есть SKLabelNode, который создается, а затем перемещается влево. Я создал последовательность для повторения действия, но это не сработает. Пожалуйста, не могли бы вы помочь мне понять, где это не удается. NodeCount отмечает, что существует только один узел.

import SpriteKit 
import GameplayKit 

class GameScene: SKScene { 

var testShape = SKLabelNode() 

override func didMove(to view: SKView) { 

    func createShape() { 

     testShape = SKLabelNode(text: "TEST") 
     testShape.position = CGPoint(x: 0.5, y: 0.5) 
     testShape.zPosition = 1 
     addChild(testShape) 

    } 

    let moveTestShape = SKAction.moveBy(x: -500, y: 0, duration: 5) 

    func repeater() { 

     createShape() 

     testShape.run(moveTestShape) 

    } 

    let delay = SKAction.wait(forDuration: 2) 

    let repeatingAction = SKAction(repeater()) 

    let sequence = SKAction.sequence([ delay, repeatingAction ]) 

    run(SKAction.repeatForever(sequence)) 

} 

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 

} 

override func update(_ currentTime: TimeInterval) { 

} 
} 
+0

Как это даже компиляциям? Вы должны кричать здесь: 'let repeatationAction = SKAction (repeatater())' В любом случае, вы хотели бы использовать 'SKAction.run (повторитель)', поскольку ваша функция является внутренней функцией. – Knight0fDragon

ответ

1

Вы не получаете ошибки компилятора?

Почему вы создаете методы в didMoveToView?

Ваш код должен выглядеть как этот

class GameScene: SKScene { 

     var testShape = SKLabelNode() 

     override func didMove(to view: SKView) { 

      let delay = SKAction.wait(forDuration: 2) 
      let repeatingAction = SKAction.run(repeater) 
      let sequence = SKAction.sequence([ delay, repeatingAction ]) 
      run(SKAction.repeatForever(sequence)) 
     } 

     func createShape() { 

      testShape = SKLabelNode(text: "TEST") 
      testShape.position = CGPoint(x: 0.5, y: 0.5) 
      testShape.zPosition = 1 
      addChild(testShape) 
     } 

     func repeater() { 

      createShape() 

      let moveTestShape = SKAction.moveBy(x: -500, y: 0, duration: 5) 
      testShape.run(moveTestShape) 
     } 
} 

Это, как вы вызываете функции/блоков кода в SKActions.

let repeatingAction = SKAction.run(repeater) 

или

let repeatingAction = SKAction.run { 
    repeater() 
} 

Также помните, наши повторяют только действие икру новых этикеток. Фактическое действие для перемещения меток не повторяется. Так что вы должны увидеть создан 1 ярлык и переехал один раз, чем через 2 секунды новый лейбл будет создаваться и переехал один раз и т.д.

Надеются, что это помогает

+0

Спасибо за отзыв. Да, это компиляция. Я думаю, из чистой удачи. Оцените объяснение правильной формы для вызова функций в SKActions. Я сделаю ваши изменения и посмотрю, будет ли он работать. –

+0

Добро пожаловать. Держите нас в курсе – crashoverride777

+0

Также помните, что мы только повторяем действие икры для новых ярлыков. Фактическое действие для перемещения меток не повторяется. Итак, что вы должны увидеть, это ярлык, созданный и перемещаемый один раз, чем через 2 секунды новый ярлык создается и перемещается один раз и т. Д. – crashoverride777

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