5

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

3 に答える 3

0

次のように、emitmentAngle を調整する必要があります。

[starField setEmissionAngle:(atan2(offset.y, offset.x) - M_PI_2)];
于 2013-12-25T05:25:46.653 に答える