使用OC的SpriteKit库实现送礼物动画

直播技术如火如茶,为了写好一个直播间的礼物的动画我也是大费周章,最初我使用了CA动画加序列帧动画来实现一个比较好看的送礼物动画。

声明:我在在女朋友在直播间封了我几个号我不知道为啥的情况下来写的这边文章,纯手打

说正题:

我所知道的写动画的方式有三种,但是我敢肯定大公司不是这样写的,所以如果高手能给我提点一下,我也是不介意的。

第一种就是我说的用CA动画加序列帧动画去实现。但是我遇到了一个致命的问题就是序列帧动画执行过程中切换到其他界面时候会有一些奇奇怪怪的问题。比如:卡在屏幕中间。我们的app第一版本是用的这样,我反正是解决了这个问题,但是我知道肯定不是这样写的。于是:

第二种方式使用高大上的cocos2d-x,但是问题来了cocos2d-x倒是不错,但是其使用的是c++的语言,你会c++么?这种发式我也实现了一下,我发现cocos2d-x的包有点大啊,有点尴尬,这不是我想要的,于是

使用OC的SpriteKit库实现送礼物动画_第1张图片

第三种使用OC自带的SpriteKit库,我们主要讲一下这个:

iOS 7新引入的Sprite Kit类库算是给iOS游戏开发者带来一些福音吧,由于是用底层的东西做开发,在效率方面应该会有很大的提高。也不单单是在游戏方面,任何需要动画效果的app也可以利用Sprite Kit来实现。

动画实现都是在skview上实现的具体代码只需要把动画的场景类SKScene放在skview上就能展示出来,场景的代码如下:

- (instancetype)initWithSize:(CGSize)size{

if (self = [super initWithSize:size]) {

[self addNodeWithScene];

}

return self;

}

/* Setup your scene here */

- (void)addNodeWithScene{

self.backgroundColor = [SKColor clearColor];

_ShoesNode = [[SKNode alloc]init];

_ShoesNode.position = CGPointMake([[UIScreen mainScreen] bounds].size.width/2, [[UIScreen mainScreen] bounds].size.height/2);

NSMutableArray *walkFrames = [NSMutableArray array];

SKTextureAtlas *bearAnimatedAtlas = [SKTextureAtlas atlasNamed:@"xie"];

for (int i=1; i <= 31; i++) {

NSString *textureName = [NSString stringWithFormat:@"shuijingxie_%d.png", i];

SKTexture *temp = [bearAnimatedAtlas textureNamed:textureName];

[walkFrames addObject:temp];

}

_bearWalkingFrames = walkFrames;

SKTexture *temp = _bearWalkingFrames[0];

_bear = [SKSpriteNode spriteNodeWithTexture:temp];

//    _bear.anchorPoint = CGPointMake(0.5, 0.5) ;

_bear.size = [[UIScreen mainScreen] bounds].size;

[_ShoesNode addChild:_bear];

[self addChild:_ShoesNode];

[self walkingBear];

}

-(void)walkingBear{

//播放纹理动画

[_bear runAction:[SKAction repeatAction:

[SKAction animateWithTextures:_bearWalkingFrames

timePerFrame:0.1f

resize:NO

restore:YES] count:1] completion:^{

NSLog(@"执行完毕");

}];

}

但是我遇到一个问题就是skview在没有加载场景的时候不能设置透明,我实在skview创建的时候给他加了个透明的场景。

有这方面的研究的可以相互探讨一下!

转载请注明出处!谢谢

你可能感兴趣的