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



有人知道SKSpriteNode上两个不同的SKTexture之间是否有褪色的方法(随着时间的推移)吗。我假设你不能直接做到这一点,并计划使用ZPosition更高的重复子精灵来实现渐变,但我只是想检查一下,是否有一些使用SKAction的方法我已经仔细研究过了。

下面的代码应该解决这个问题,假设新纹理适合旧纹理的顶部(它不会将淡出上一个纹理,而只是将淡出顶部的新纹理)。我省略了一些次要的实现细节,比如定时模式。

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

最新更新