Sprite Kit animateWithTextures滞后

时间:2015-01-20 09:20:25

标签: ios animation sprite-kit sktextureatlas

我在Sprite Kit游戏中使用纹理图集。我正在为每个动画创建SKTextureAtlas对象并将其存储在数组中。因此,当我需要在我的英雄上播放动画时,我会调用animateWithTextures向其发送相应的数组。当我开始动画时有一些滞后。有没有办法顺利开始动画?

2 个答案:

答案 0 :(得分:3)

我相信没有办法解决这个问题。你需要做的是在游戏实际开始之前预先加载地图集。只需在游戏开始时显示加载屏幕并预加载地图集。

您可以尝试使用+ preloadTextureAtlases:withCompletionHandler:

[SKTextureAtlas preloadTextureAtlases:textureAtlasesArray withCompletionHandler:^{ /*Game Start*/}];

Adventure game example

中描述了在其他所有内容之前实现资源加载的另一种方法(并将所有内容保存在内存中)

有关异步加载资源的更多详细信息,请查看可从上面的链接下载的代码。

答案 1 :(得分:2)

有同样的问题,我在游戏中通过不使用地图集来解决它。所以试试这个例子:

-(void)makePlayerAnimation:(SKSpriteNode *)player
{
SKTexture *texture1 = [SKTexture textureWithImageNamed:@"texture1.png"];
SKTexture *texture2 = [SKTexture textureWithImageNamed:@"texture2.png"];
SKTexture *texture3 = [SKTexture textureWithImageNamed:@"texture3.png"];


SKAction *animationTextures = [SKAction animateWithTextures:@[texture1, texture2, texture3] timePerFrame:0.1];


[player runAction:animationTextures];
}

当你想激活动画时,请执行以下操作:

[self makePlayerAnimation:myNode];

[self makePlayerAnimation:self.myNode];

取决于你如何宣布它。 如果您需要永久运行动画,您只需在上一个方法的末尾添加行:

SKAction *repeat = [SKAction repeatActionForever: animationTextures];

希望这有帮助。