2014-02-09 123 views
2

你將如何去動畫SKScene的背景顏色?我試過一個UIView動畫,但並不奇怪,它沒有工作。 Sprite-Kit中有這樣的功能嗎?Objective c - SKScene的動畫背景顏色

我正在尋找這樣的事情,但對於雪碧套件:

[UIView animateWithDuration:0.25 animations:^{ 
    self.backgroundColor = [UIColor redColor]; 
}]; 

目前,爲周圍的工作我都疊加在SKView一個UIView,但我想的東西更靈活。

我對Sprite-Kit相對來說比較新,所以如果這是非常簡單的事情!

目前我有:

-(id) initWithSize:(CGSize)size { 
    if (self = [super initWithSize:size]) { 
     _bg = [SKSpriteNode spriteNodeWithColor:[SKColor colorWithRed:0.13 green:0.13 blue:0.13 alpha:1] size:self.size]; 
     _bg.position = CGPointMake(self.size.width/2, self.size.height/2); 
     [self addChild:_bg]; 
    } 
    return self; 
} 

-(void) colorise :(UIColor*)color { 
    [_bg runAction:[SKAction colorizeWithColor:color colorBlendFactor:_bg.colorBlendFactor duration:1]]; 
} 

而且在初始化後SKView,我設置取決於一個NSUserDefault值BG精靈的顏色。

if ([[NSUserDefaults standardUserDefaults] integerForKey:@"currGameMode"] == 0) { 
((bubbleAnimation2*)_bubbleEffectView.scene).bg.color = [UIColor colorWithRed:0.13 green:0.13 blue:0.13 alpha:1];} 
else {((bubbleAnimation2*)_bubbleEffectView.scene).bg.color = [UIColor colorWithRed:0.25 green:0.13 blue:0.13 alpha:1];} 

謝謝!

+1

添加悉數到場SpriteNode並使用如動畫它的顏色。 SKAction的colorizeWithColor? – nzs

+0

太棒了,謝謝!我想我是在解決問題。我只是有點驚訝,Sprite-Kit中沒有任何東西可以讓這個過程稍微簡單些。 – Hamish

+0

嗯..實際上它並不像預期的那樣工作,它會褪色到顏色,然後變成不同顏色的陰影。 – Hamish

回答

1

那麼,我想出了一個完全過度設計的解決方案!我的背景精靈數組,我克隆原來的精靈,並改變它的顏色,然後在動畫它

這裏是我的代碼:

-(void) colorise :(UIColor*)color { 
    // [_bg runAction:[SKAction colorizeWithColor:color colorBlendFactor:_bg.colorBlendFactor duration:1]]; 
    if ([_bgObjects count] != 0) { 
     SKSpriteNode* newBg = [[_bgObjects objectAtIndex:0] copy]; 
     newBg.color = color; 
     newBg.alpha = 0; 
     [self insertChild:newBg atIndex:1]; 
     [newBg runAction:[SKAction fadeAlphaTo:1 duration:0.5]]; 
     [_bgObjects addObject:newBg]; 

     for (int i = 0; i < ([_bgObjects count]-1); i++) { 
      [[_bgObjects objectAtIndex:i] runAction:[SKAction fadeAlphaTo:0 duration:0.5]]; 
     } 

    } 
} 

-(void) update:(NSTimeInterval)currentTime { 
    if ([_bgObjects count] > 1) { 

    NSMutableArray* toDelete = [NSMutableArray arrayWithObjects: nil]; 

    for (SKSpriteNode* bg in _bgObjects) { 
     if ((bg.alpha == 0) && !bg.hasActions) { 
      [bg removeFromParent]; 
      [toDelete addObject:bg]; 
     }} [_bgObjects removeObjectsInArray:toDelete]; 
    } 
}