2016-10-21 9 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 repetAction = SKAction (repeater())'어쨌든 함수가 내부 함수이기 때문에'SKAction.run (repeater) '를 사용하고 싶을 것이다. – Knight0fDragon

답변

1

컴파일러 오류가 발생하지 않았습니까?

왜 didMoveToView에 메서드를 만드시겠습니까? 당신이 SKActions에서 함수/코드 블록을 호출하는 방법을

코드는이 더이

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) 
     } 
} 

처럼 보일 것입니다.

let repeatingAction = SKAction.run(repeater) 

또는

let repeatingAction = SKAction.run { 
    repeater() 
} 

또한 우리는 새로운 라벨 스폰 동작을 반복하는 기억한다. 레이블을 이동하는 실제 작업은 반복되지 않습니다. 그래서 당신은 1 개 레이블을 만들고 2 초 후에 새 레이블이 작성되는 것보다, 한 번에 이동이

+0

의견을 보내 주셔서 감사합니다. 예, 컴파일 중입니다. 나는 운이 좋을 것 같아. SKActions에서 함수를 호출하는 올바른 형식에 대한 설명을 이해합니다. 나는 당신의 변화를 만들고 그것이 실행되는지 볼 것입니다. –

+0

당신은 환영합니다. 우리를 계속 게시하십시오 – crashoverride777

+0

우리는 새 레이블에 대한 스폰 행동 만 반복한다는 것을 기억하십시오. 레이블을 이동하는 실제 작업은 반복되지 않습니다. 그래서 당신이 볼 수있는 것은 라벨이 만들어지고 한번 움직입니다. 2 초 후에 새로운 라벨이 만들어지고 한번 움직이게됩니다. – crashoverride777