2013-09-29 66 views
1

我想通過使用UIRrotationGestureRecognizer旋轉SKSpriteNode。我已經實現了一個代碼,但有時候,當我旋轉節點時,它跳轉到一個不是它應該是的那個旋轉。在這裏,你有代碼:SKSpriteNode旋轉不正常

- (void) handleRotation:(UIRotationGestureRecognizer *) rotationrecognizer{ 

    CGFloat initialrotation = 0.0; 

    if (rotationrecognizer.state == UIGestureRecognizerStateBegan) { 

     CGPoint touchLocation = [rotationrecognizer locationInView:rotationrecognizer.view]; 
     touchLocation = [self convertPointFromView:touchLocation]; 
     [self selectNodeForTouch:touchLocation]; 

     initialrotation = selected.zRotation; 
    } 

    else if (rotationrecognizer.state == UIGestureRecognizerStateChanged) {   

     CGFloat angle = initialrotation + rotationrecognizer.rotation; 
     selected.zRotation = angle;  

    } 
} 
+0

考慮到我確實已經解決了您的代碼的一個根本問題,您將不勝感激並接受我的答案。 – MobileVet

回答

3

您在每次調用重置初始旋轉0 ...你應該,如果你需要它駐留移動這是您的觀點的伊娃。

你現在寫的方式,即設置「角度」的線是有效等於這個:

CGFloat angle = 0 + rotationrecognizer.rotation; 

相反,你應該做到以下(其中initialRotation初始定義爲私人伊娃):

- (void) handleRotation:(UIRotationGestureRecognizer *) rotationrecognizer{ 

    if (rotationrecognizer.state == UIGestureRecognizerStateBegan) { 

     CGPoint touchLocation = [rotationrecognizer locationInView:rotationrecognizer.view]; 
     touchLocation = [self convertPointFromView:touchLocation]; 
     [self selectNodeForTouch:touchLocation]; 

     _initialrotation = selected.zRotation; 
    } 

    else if (rotationrecognizer.state == UIGestureRecognizerStateChanged) {   

     CGFloat angle = _initialrotation + rotationrecognizer.rotation; 
     selected.zRotation = angle;  

    } 
} 
+0

我已經完成了你所說的話,並且在某些情況下,精靈會不斷旋轉... –

+0

你能再詳細描述一下他們在某些情況下如何迴應'壞''嗎? 他們曾經如何操作你的期望?什麼是'壞'?你打印出你的旋轉值嗎?它們有意義嗎? – MobileVet

+0

我的意思是說它可能旋轉了70º,然後當我旋轉一點時它跳到200º。但我沒有申請130º旋轉。 –