2014-02-09 1 views
2

SKScene의 배경색에 애니메이션 효과를 적용하려면 어떻게해야합니까? UIView 애니메이션 시도했지만 놀랍지 않게 작동하지 않았다. Sprite-Kit에서이 작업을 수행 할 수 있습니까?목표 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

글쎄, 나는 완전히 공학적인 해결책을 찾았다. 나는 배경 스프라이트의 배열을하고 난 원래 스프라이트를 복제하고에

여기 내 코드의 IT 애니메이션 후 색상의 변경 :.

-(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]; 
    } 
} 
관련 문제