2013-12-11 22 views
4

我正在使用SpriteKit的粒子發射器系統在背景中構建一個移動的星場,玩家的飛船位於屏幕的中心。改變現有粒子的方向

當玩家觸摸屏幕的某個區域時,我計算角度併爲玩家精靈製作動畫,使其旋轉。

然而,當我將它應用到星域時,整個矩形的星域被旋轉繪製。然而,我想要的是單個粒子只是開始向新的方向前進。

這就是旋轉一整張紙上的點與整個紙上的點之間的區別,只是讓點移動到一個新的角度。那有意義嗎?

這裏是我迄今爲止的播放器正確地旋轉,但星域「旋轉就像一張整張紙」:

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

回答

0

您需要調整emissionAngle如下:

[starField setEmissionAngle:(atan2(offset.y, offset.x) - M_PI_2)]; 
0

你應該probabl你做的是有一個particleField節點或什麼,並使用它作爲targetNode你有發射器。 (另外,把發射器也作爲一個子節點)。 particleField只是標準的SKNode不是發射器。它會有一個孩子的發射器,所有的粒子也是孩子。

如果你喜歡,就把它當作「粒子層」。

現在你有「擁有」一個節點的所有粒子和發射器等...

粒子的位置和粒子的所有依賴於這個particleField節點的位置的方向。

現在你可以旋轉particleField並移動它等等(或縮放等等),所有的粒子都會隨之移動。