在SKSpriteNode上的两个不同的SKTextures之间淡入淡出

时间:2014-04-11 08:38:13

标签: ios sprite-kit skspritenode sktexture

是否有人知道SKTexture上两个不同的SKSpriteNode之间是否存在淡出(随着时间的推移)的方法。我假设您不能直接执行此操作并计划使用具有更高ZPosition的重复子精灵来实现淡入淡出,但我只想检查是否存在使用{{1 ()我看过了。

1 个答案:

答案 0 :(得分:2)

以下代码应解决此问题,假设新纹理适合旧纹理(它不会淡化 out 以前的纹理,而只是淡化 新的一个在上面)。我遗漏了一些小的实现细节,比如计时模式。

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