2017-03-06 16 views
0

私を助けてください!私はGameSceneクラスで宣言した関数をupdate関数内で呼び出そうとしています。しかし、それは関数を認識しません、私はこれがクラスや何かと関係があると思います。なぜなら、すべてのフレームで関数を実行したいからです(しかし、独自の動きに応じて個々のspriteCopyを更新する必要があります)。スプライトのコピーがすべて関数に従っていることを確認し、無限に続行してください。関数更新で関数を呼び出せないのはなぜですか?

ご協力いただきありがとうございます。

func touchUp(atPoint pos : CGPoint) { 

    if let spriteCopy = self.sprite?.copy() as! SKShapeNode? { 
     spriteCopy.fillColor = UIColor.white 
     spriteCopy.position = initialTouch 
     spriteCopy.physicsBody?.restitution = 0.5 
     spriteCopy.physicsBody?.friction = 0 
     spriteCopy.physicsBody?.affectedByGravity = false 
     spriteCopy.physicsBody?.linearDamping = 0 
     spriteCopy.physicsBody?.angularDamping = 0 
     spriteCopy.physicsBody?.angularVelocity = 0 
     spriteCopy.physicsBody?.isDynamic = true 
     spriteCopy.physicsBody?.categoryBitMask = 1 //active 
     spriteCopy.isHidden = false 

     touchUp = pos 

     xAxisLength = initialTouch.x - touchUp.x 
     yAxisLength = initialTouch.y - touchUp.y 
     xUnitVector = xAxisLength/distanceBetweenTouch * power * 300 
     yUnitVector = yAxisLength/distanceBetweenTouch * power * 300 
     spriteCopy.physicsBody?.velocity = CGVector(dx: xUnitVector, dy: yUnitVector) 


     func directionRotation() { 
      if let body = spriteCopy.physicsBody { 
       if (body.velocity.speed() > 0.01) { 
        spriteCopy.zRotation = body.velocity.angle() 
       } 
      } 
     } 

     directionRotation() //When I run the function with this line, the spriteCopy 
          //is spawned initially with the right angle (in the direction 
          //of movement) but doesn't stay updating the angle 


     sprite?.isHidden = true 

     self.addChild(spriteCopy) 


    } 

} 

、ここで関数は機能更新で​​認識されていない:

override func update(_ currentTime: TimeInterval) { 

    directionRotation() //this line has error saying "use of unresolved identifier" 

    // Called before each frame is rendered 
} 

編集:私は考えていたここ

は、並べ替えの範囲で動作します関数のコードがありますおそらく、spriteCopyのプロパティが生成された後のアクセスを制限しない "copy()"メソッドなしで、複数のspriteCopyを生成する方法があるかもしれません。覚えている間も、directionRotation関数をそれぞれに独立して適用できるように、個々のSpriteNodesでなければなりません(FYI:ユーザーは50以上のスプライトノードを生成できます)

答えて

6

ローカル関数を指定しました。

func directionRotation(node:SKNode) { 
    if let body = node.physicsBody { 
     if (body.velocity.speed() > 0.01) { 
      node.zRotation = body.velocity.angle() 
     } 
    } 
} 
override func update(_ currentTime: TimeInterval) { 

    for node in self.children 
    { 
     directionRotation(node) 
    } 
} 
+0

私は方向回転機能を入れてみました:あなたは私はあなたには、いくつかの操作を行う必要があるわけ

はこのように考えるタッチアップ機能実現directionRotation

func directionRotation() { if let body = spriteCopy.physicsBody { if (body.velocity.speed() > 0.01) { spriteCopy.zRotation = body.velocity.angle() } } } func touchUp(atPoint pos : CGPoint) { ... } 

EDITから出て移動する必要がありますtouchup関数の上にあるので、コピーがまだ作成されていないため、spriteCopyを「スプライト」に変更する必要がありました。しかしそれはうまくいかないようでした。産卵時の初期の角度さえも機能しません。 - ありがとうございました –

+0

spriteCopyのプロパティへのアクセスを制限しない "copy()"メソッドがなく、複数のspriteCopyを生成する方法があるかもしれません。まだ個々のSpriteNodesでなければならないので、directionRotation関数をそれぞれ独立して適用することができます –

+0

実装するものを説明できますか? – Sergey

関連する問題