我有这段代码
// 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];
}];
我有这种生涩的动画
我不知道观看视频是否清晰,但是鱼的垂直和水平缩放一帧(当发生这种情况时,你可以在鱼的下方看到一个红色光环)。
我降低了模拟器的速度,因此您可以看到问题。在下面的动画中,鱼正在调整大小,移动位置等,但它应该是稳定的,因为它没有关键帧动画之外的动画。
所有图像都具有相同的尺寸,动画非常完美和流畅,因为您可以在下一个gif上看到它在Photoshop上运行。
可能导致这种情况的任何想法?
答案 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]];
有关使用SKTextureAtlas
:Working With Sprites
希望这可以帮助其他人解决同样的问题。