我正在使用 SpriteKit 的 Particle Emitter 系统在背景中构建一个移动的星域,玩家的飞船位于屏幕中央。
当玩家触摸屏幕的某个区域时,我会计算角度并动画玩家精灵转向该方向。
然而,当我将它应用于星域时,星域绘制的整个矩形都会旋转。然而,我想要的是让单个粒子简单地开始朝着新的方向移动。
这就是旋转一张满是点的整张纸和仅仅让这些点移向一个新角度之间的区别。那有意义吗?
到目前为止,当玩家正确旋转但星域“像整张纸一样旋转”时,这是我目前所拥有的:
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
// Choose one of the touches to work with
UITouch *touch = [touches anyObject];
CGPoint location = [touch locationInNode:self];
CGPoint center = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));
CGPoint offset = rwSub(location, center);
SKEmitterNode *starfield = (SKEmitterNode *)[self childNodeWithName:@"starfield"];
SKSpriteNode *player = (SKSpriteNode *)[self childNodeWithName:@"player"];
SKAction *rotateNode = [SKAction rotateToAngle: (CGFloat)atan2(offset.y, offset.x) duration:0.5 shortestUnitArc:TRUE];
[player runAction: rotateNode];
SKAction *rotateStarfieldNode = [SKAction rotateToAngle: (CGFloat)(atan2(offset.y, offset.x) - M_PI_2) duration:0.5 shortestUnitArc:TRUE];
[starfield runAction: rotateStarfieldNode];
}