2014-03-30 58 views
1

所以我正在寫一個射手在目標上射箭的遊戲。通過使用由用戶在屏幕上拖動他們的手指形成的線的x和y分量來確定拍攝速度和角度。我在這裏遇到的麻煩的效果是讓我的弓箭手手臂以與上面提到的線形成的角度相同的角度旋轉SpriteKit:根據計算出的角度旋轉節點

我計算控制器類中的角度我寫得像這樣(不確定是否所有鑄造是壞:)

+(CGFloat)calculateAngleToRotateByGivenX:(CGFloat)xComponent Y:(CGFloat)yComponent{ 
    double oppOverAdj = (double)yComponent/(double)xComponent; 
    return -(CGFloat)atan(oppOverAdj); 

於是我給那個計算的角度給我的射手節點使用旋轉臂

-(void)rotateArmByAngle:(CGFloat)angle{ 
    SKAction *rotateArmBy = [SKAction rotateToAngle:angle duration:0 shortestUnitArc:YES]; 
    [[self childNodeWithName:@"upperArm"]runAction:rotateArmBy];  
} 

所有它看起來像這樣

場景放在一起
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{ 
    UITouch *touch = [touches anyObject]; 
    CGPoint currentPosition = [touch locationInNode:self]; 
    CGPoint previousPosotion = [touch previousLocationInNode:self]; 
    [player rotateArmByAngle:[PSSpriteController calculateAngleToRotateByGivenX:intialTouchPosotion.x-currentPosition.x Y:initialTouchPosition.y-currentPosition.y]]; 
} 

測試時,手臂旋轉但不完全達到我期望的角度。我正在尋找任何建議,以獲得我正在工作,或者如果有一個完全不同的方法,我應該採取我很想給這一槍,謝謝。另外讓我知道是否有更多的信息會有用。

+0

你能告訴你期待什麼,什麼是實際發生的區別? –

+0

它看起來好像從0到180deg可以正常工作,然後翻轉並面向錯誤的方向。這是它的工作http://imgur.com/PWDjwuW,這裏與它翻轉了錯誤的方向http://imgur.com/tfcW2ah – Jaicob

回答

0

你可以試試下面的代碼旋轉基於用戶的觸摸位置精靈:

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 

{ 

    CGPoint positionInScene = [touch locationInNode:self]; 

    float deltaX = positionInScene.x; 
    float deltaY = positionInScene.y; 

    float angle = atan2f(deltaY, deltaX) + M_PI_2; 

    player.zRotation = angle; 

} 
+0

感謝您的輸入,該方法是有點關閉,因爲它需要計算在問候到觸摸的初始位置。但是,您提請注意,我沒有添加M_PI_2,這個問題解決了我的問題,所以謝謝! – Jaicob

+0

@Jaicob你是怎麼做的兄弟?我試過了,但沒有工作:( – Septronic