Я пытаюсь сделать sprite вращаться одним касанием пальца. Честно говоря, я понятия не имею, как это сделать, новичок в spriteKit. Любые идеи?Как повернуть изображение/спрайт с помощью spriteKit?
ответ
Это повернет спрайт туда, где вы касаетесь действия. Если вы хотите, чтобы он вращался при перетаскивании пальца. Вы должны удалить действие и выполнить расчет на 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;
}
}
Как вы сказали, я хочу, чтобы он вращался это при перетаскивании пальца. Но что вы имеете в виду, удалив действие, как спрайт будет вращаться без ac Тион? Код может быть полезен ... Еще раз спасибо! –
ПрикосновенияMoved: метод вызывается каждый раз, когда движение касания перемещается, что довольно много. Если вы добавили действие каждый раз, это, вероятно, выглядело бы странно и было бы неэффективным. Поэтому вы должны обновлять ротацию вручную. Я обновил ответ на альтернативное решение. – gzafra
ли вы хотите, чтобы держать на вращающемся до тех пор, как вы касаетесь или в течение заданного времени или заданное количество – Egghead
Вы хотите повернуть спрайт на определенный угол в зависимости от местоположения касания пользователя или просто открутить спрайт на неопределенный срок? – 0x141E
спасибо людям (: этот парень там решил это (: –