2017-07-12 14 views
3

SKShapeNodeのが動作していません。コードが実行されず、コンソールが「Snake is moving」をログしていてもノードは動いていません。なぜなら、ノードはSKSceneのプロパティであり、アクションはスコープ関数の一部であるからです。SKActionがSKSpriteNodeで実行されていません

class LevelScene: SKScene, SnakeShower { 

    var snake: Snake { 
     let theSnake = Snake(inWorld: self.size) 
     return theSnake 
    } 

    override func didMove(to view: SKView) { 
     self.backgroundColor = .green 
     snake.delegate = self 
    } 

    var myNode: SKShapeNode { 
     let node = SKShapeNode(rectOf: snake.componentSize) 
     node.position = snake.head 
     node.fillColor = .red 
     return node 
    } 

    func presentSnake() { // function called by the snake in the delegate (self) 
     self.addChild(myNode) 
     startMoving() 
    } 

    func startMoving() { 
     print("snake is moving") 
     myNode.run(SKAction.repeatForever(SKAction.sequence([ 
      SKAction.move(by: self.snake.direction.getVector(), duration: 0.2), 
      SKAction.run({ 
       if self.myNode.position.y > (self.size.height/2 - self.snake.componentSize.height/2) { 
        self.myNode.removeAllActions() 
       } 
      }) 
     ]))) 
    } 
} 

アクション

+0

あなたが何を意味するかは、 '動作しない' - 正確に何が起こりますか? –

+0

@SteveIves Edited。 – Fayyouz

+0

'selfVnake.direction.getVector()'を 'CGVector(dx:200、dy:200)'に変更して 'getVector()'が問題になっているかどうかを確認します。 –

答えて

6

myNodeが計算されたプロパティであるとして、彼らはプロパティが同じ関数内で宣言されたとき、これは動作するために使用。 self.addChild(myNode)はノードを追加しますが、格納されるプロパティーはmyNodeではありません。

myNode.run最初に新しいノードをシーンに追加せずに計算します。次に、アクションを実行します。シーンにはない別のノードなので、決して動かないでしょう。

にご myNode定義のそれぞれで独立し変更

var myNode : SKShapeNode! 

didMove(to view:アド:

myNode = SKShapeNode(rectOf: snake.componentSize) 
myNode.position = snake.head 
myNode.fillColor = .red 
+0

@KoD - 編集 –

+1

6までの投票に感謝!真剣に?自分のノードに計算されたプロパティを使用することによって多くの人々が問題を抱えているとは想像もできません。 –

関連する問題