2014-10-11 4 views
1

Я пытаюсь сделать sprite вращаться одним касанием пальца. Честно говоря, я понятия не имею, как это сделать, новичок в spriteKit. Любые идеи?Как повернуть изображение/спрайт с помощью spriteKit?

+0

ли вы хотите, чтобы держать на вращающемся до тех пор, как вы касаетесь или в течение заданного времени или заданное количество – Egghead

+0

Вы хотите повернуть спрайт на определенный угол в зависимости от местоположения касания пользователя или просто открутить спрайт на неопределенный срок? – 0x141E

+0

спасибо людям (: этот парень там решил это (: –

ответ

1

Это повернет спрайт туда, где вы касаетесь действия. Если вы хотите, чтобы он вращался при перетаскивании пальца. Вы должны удалить действие и выполнить расчет на touchesMoved:.

-(void)didMoveToView:(SKView *)view { 
    sprite = [SKSpriteNode spriteNodeWithImageNamed:@"Spaceship"]; 

    sprite.xScale = 0.5; 
    sprite.yScale = 0.5; 
    sprite.position = CGPointMake(self.frame.size.width/2, self.frame.size.height/2); 

    [self addChild:sprite]; 
} 

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    for (UITouch *touch in touches) { 
     CGPoint location = [touch locationInNode:self]; 


     float dY = sprite.position.y - location.y; 
     float dX = sprite.position.x - location.x; 
     float angle = atan2f(dY, dX) + 1.571f; 
     [sprite runAction:[SKAction rotateToAngle:angle duration:0.5 shortestUnitArc:YES]]; 
     return; 
    } 
} 

В качестве альтернативы:? (Не забудьте удалить код из touchesBegan:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{ 
    for (UITouch *touch in touches) { 
     CGPoint location = [touch locationInNode:self]; 

     float dY = sprite.position.y - location.y; 
     float dX = sprite.position.x - location.x; 
     float angle = (atan2f(dY, dX)) + 1.571f; 
     sprite.zRotation = angle; 
    } 
} 
+0

Как вы сказали, я хочу, чтобы он вращался это при перетаскивании пальца. Но что вы имеете в виду, удалив действие, как спрайт будет вращаться без ac Тион? Код может быть полезен ... Еще раз спасибо! –

+0

ПрикосновенияMoved: метод вызывается каждый раз, когда движение касания перемещается, что довольно много. Если вы добавили действие каждый раз, это, вероятно, выглядело бы странно и было бы неэффективным. Поэтому вы должны обновлять ротацию вручную. Я обновил ответ на альтернативное решение. – gzafra

Смежные вопросы