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 (Swift)
在 SKScene 暂停时为 SKSpriteNode 的 alpha 设置动画