2

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

4

2 回答 2

3

我确信有几种方法可以解决这个问题。您需要做的是在游戏实际开始之前预加载地图集。只需在游戏开始时显示加载屏幕并预加载您的地图集。

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

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

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

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

于 2015-01-20T13:01:15.173 回答
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];

希望这可以帮助。

于 2016-10-16T21:17:53.363 回答