2014-04-11 48 views
1

有谁知道是否有一种方法可以在SKSpriteNode上的两个不同的SKTexture之间淡入(随着时间的推移)。我假设你不能直接这样做,并计划使用重复的孩子精灵具有较高ZPosition实现淡入淡出,但我只是想确认有没有使用一些方法SKAction(S),我已经看了以上。SKSpriteNode上的两个不同SKTextures之间的淡入淡出

+2

烨,使用两个精灵和淡入淡出他们 – LearnCocos2D

回答

2

下面的代码应该解决这个问题,假设新的纹理适合凌驾旧的(它不褪色以前的质感,但只是在淡化对顶部的新)。我省略了一些次要的实现细节,如定时模式。

-(void) fadeTexture:(SKTexture *)newTexture ontoSpriteNode:(SKSpriteNode *)referenceSpriteNode withDuration:(CFTimeInterval)duration { 

    SKSpriteNode * fadeInSprite = [self fadeInSpriteWithTexture:newTexture referenceSpriteNode:referenceSpriteNode]; 

    [[referenceSpriteNode parent] addChild:fadeInSprite]; 
    [fadeInSprite runAction:[SKAction sequence:@[ 
     [SKAction fadeAlphaTo:1 duration:duration], 
     [SKAction runBlock:^{ 
      [fadeInSprite removeFromParent]; 
      [referenceSpriteNode setTexture:newTexture]; 
     }] 
    ]]]; 
} 

-(SKSpriteNode *) fadeInSpriteWithTexture:(SKTexture *)newTexture referenceSpriteNode:(SKSpriteNode *)referenceSpriteNode { 

    SKSpriteNode * fadeInSprite = [SKSpriteNode spriteNodeWithTexture:newTexture size:[referenceSpriteNode size]]; 
    [fadeInSprite setAlpha:0]; 
    [fadeInSprite setAnchorPoint:[referenceSpriteNode anchorPoint]]; 
    [fadeInSprite setPosition:[referenceSpriteNode position]]; 
    return fadeInSprite; 
}