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