精灵套件 - 生涩的动画

时间:2014-02-11 09:21:09

标签: iphone ipad ios7 sprite-kit

我有这段代码

  // load animation
  NSMutableArray *images=[NSMutableArray arrayWithCapacity:14];
  for (int i=1; i<=14; i++) {
    NSString *fileName=[NSString stringWithFormat:@"fish%d.png",i];
    SKTexture *tempTexture=[SKTexture textureWithImageNamed:fileName];
    [images addObject:tempTexture];
  }

  NSUInteger numberOfFrames = [images count];

  [SKTexture preloadTextures:images withCompletionHandler:^(void){
    SKAction *nadar = [SKAction animateWithTextures:images timePerFrame:1.0f/numberOfFrames];
    SKAction *forever = [SKAction repeatActionForever:nadar];
    [self.fish runAction:forever];
  }];

我有这种生涩的动画

enter image description here

我不知道观看视频是否清晰,但是鱼的垂直和水平缩放一帧(当发生这种情况时,你可以在鱼的下方看到一个红色光环)。

我降低了模拟器的速度,因此您可以看到问题。在下面的动画中,鱼正在调整大小,移动位置等,但它应该是稳定的,因为它没有关键帧动画之外的动画。

enter image description here

所有图像都具有相同的尺寸,动画非常完美和流畅,因为您可以在下一个gif上看到它在Photoshop上运行。

enter image description here

可能导致这种情况的任何想法?

2 个答案:

答案 0 :(得分:2)

尝试使用animateWithTextures:timePerFrame:resize:restore:设置调整大小为YES。

答案 1 :(得分:0)

找到这个帖子后,它解决了我的部分问题。另一种是当纹理首次动画时,仍然存在一些混乱。由于我使用SKTextureAtlas,我的问题是使用了错误的函数来预加载纹理。

原因:

[SKTexture textureWithImageNamed:textureName]

使用:

解决
[atlas textureNamed:textureName]

示例

SKTextureAtlas *atlas = [SKTextureAtlas atlasNamed:@"walk"];
NSMutableArray *textures = [NSMutableArray array];
for (NSString *textureName in atlas.textureNames)
     [textures addObject:[atlas textureNamed:textureName]];

有关使用SKTextureAtlasWorking With Sprites

的信息,请参阅Apple文档

希望这可以帮助其他人解决同样的问题。