SKSpriteNode 动画渐变

Posted

技术标签:

【中文标题】SKSpriteNode 动画渐变【英文标题】:SKSpriteNode animating gradient 【发布时间】:2013-11-05 00:53:10 【问题描述】:

我有一个 SKSpriteNode,它一开始是透明的,我想让它从一侧开始完全可见,然后移动到另一侧,以整个 sprite 可见结束。 This question 解决了 UIViews 上的 CALayers 问题,但我们似乎无法访问 SKSpriteNode 的 CALayers。

有没有办法将动画渐变应用到 SKSpriteNodes?

【问题讨论】:

你看过 SKEffectNode 吗? 【参考方案1】:

这是一个如何使用裁剪节点的示例。您可以通过在 Xcode 中创建一个新的“SpriteKit Game”项目并在 MyScene.m 中替换 touchesBegan 来运行它:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
    /* Called when a touch begins */

    for (UITouch *touch in touches) 
        CGPoint location = [touch locationInNode:self];

        SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithImageNamed:@"Spaceship"];

        SKCropNode *cropNode = [SKCropNode node];

        // maskNode is twice as big as the sprite:
        // fully masked on the left, fully visible on the right
        SKNode *masked = [SKSpriteNode spriteNodeWithColor:[SKColor clearColor] size:sprite.frame.size];
        SKNode *shown  = [SKSpriteNode spriteNodeWithColor:[SKColor whiteColor] size:sprite.frame.size];
        shown.position = CGPointMake(sprite.frame.size.width, 0);

        SKNode *maskNode = [SKNode node];
        [maskNode addChild:masked];
        [maskNode addChild:shown];

        cropNode.maskNode = maskNode;
        cropNode.position = location;

        [self addChild:cropNode];
        [cropNode addChild:sprite];

        SKAction *fadeIn = [SKAction moveBy:CGVectorMake(-sprite.frame.size.width, 0) duration:5];
        [maskNode runAction:fadeIn];
    

【讨论】:

以上是关于SKSpriteNode 动画渐变的主要内容,如果未能解决你的问题,请参考以下文章

如何使用动画回收 SKSpriteNode

在触摸时将动画添加到 SKSpriteNode (Swift)

在动画期间更改 SKSpriteNode 的锚点?

在 SKScene 暂停时为 SKSpriteNode 的 alpha 设置动画

在SKScene暂停时动画SKSpriteNode的alpha

动画效果-渐变动画