2014-10-11 69 views
1

我想让一个精灵旋转一个手指触摸。老实说,我不知道该怎么做,spriteKit是新的。 任何想法?如何在spriteKit上触摸图像/精灵?

+0

删除代码你希望它继续只要你触摸旋转或在设定时间或固定金额 – Egghead 2014-10-11 21:30:15

+0

你想要根据用户的触摸位置将精灵旋转到特定的角度,还是无限期地旋转精灵? – 0x141E 2014-10-11 21:34:34

+0

感谢人(:这个人在那里解决了它(:: – 2014-10-12 14:18:33

回答

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

)正如你所说,我希望它旋转它是在拖动手指的同时,但是你的意思是通过去除动作,精灵如何在没有交流的情况下旋转重刑?代码可能会有帮助...再次感谢! – 2014-10-16 20:11:26

+0

touchesMoved:方法在每次触摸移动时都会被调用,这是相当多的时间。如果每次添加一个动作,它可能看起来很奇怪,而且效率很低。所以你必须手动更新旋转。我更新了答案替代解决方案。 – gzafra 2014-10-16 21:16:54