2016-10-21 8 views
0

基本的なSwift 3とSpriteKitを実践するためのテストシーンを作成しました。より複雑な目標に移る前に、基本を理解して学びたいと思っています。SKLabelNodeが移動します。しかし、アクションは繰り返されません。

ここでは、作成されたSKLabelNodeがあり、次に左に移動します。私はアクションを繰り返すためのシーケンスを作成しましたが、動作しません。それがどこで失敗するのか理解してもらえますか? NodeCountはノードが1つしかないことに注意します。

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

また、私たちは新しいラベルのスポーンアクションを繰り返すだけです。ラベルを移動する実際の動作は繰り返されません。ラベルが作成されて1回移動すると、2秒後に新しいラベルが作成され、1回移動されます。 – crashoverride777

関連する問題