SpriteKit:根据计算出的角度旋转节点

时间:2014-03-30 04:04:54

标签: ios iphone objective-c rotation sprite-kit

所以我正在写一个游戏,射手向目标射箭。通过使用用户在屏幕上拖动手指形成的线的x和y分量来确定镜头速度和角度。我在这里遇到的困难是让我的弓箭手臂以与上面提到的线形成相同的角度旋转

我在这样编写的控制器类中计算角度(不确定是否所有投射都是坏的:[)

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

然后我将计算出的角度给我的Archer节点用来旋转手臂

-(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]];   
}

测试时,手臂会旋转,但不会达到我预期的角度。我正在寻找任何建议来获得我的工作,或者我应该采取完全不同的方法,我也很乐意给它一个机会,谢谢。如果有更多信息可用,请告诉我。

1 个答案:

答案 0 :(得分: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;

}