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