Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 精灵套件动画纹理滞后_Ios_Animation_Sprite Kit_Sktextureatlas - Fatal编程技术网

Ios 精灵套件动画纹理滞后

Ios 精灵套件动画纹理滞后,ios,animation,sprite-kit,sktextureatlas,Ios,Animation,Sprite Kit,Sktextureatlas,我在我的精灵工具包游戏中使用纹理地图集。我正在创建SKTextureAtlas对象,并将其纹理存储在每个动画的数组中。因此,当我的英雄需要一些动画时,我调用animateWithTextures将其发送到相应的数组。当我开始制作动画时有一些延迟。有什么方法可以顺利开始动画制作吗?我确信没有什么方法可以解决这个问题。你需要做的是在游戏真正开始之前预装一个地图册。只需在游戏开始时显示加载屏幕并预加载地图册 你可以试试看 中描述了另一种实现先加载资源再加载(并将所有内容保留在内存中)的方法 有关异步加

我在我的精灵工具包游戏中使用纹理地图集。我正在创建
SKTextureAtlas
对象,并将其纹理存储在每个动画的数组中。因此,当我的英雄需要一些动画时,我调用
animateWithTextures
将其发送到相应的数组。当我开始制作动画时有一些延迟。有什么方法可以顺利开始动画制作吗?

我确信没有什么方法可以解决这个问题。你需要做的是在游戏真正开始之前预装一个地图册。只需在游戏开始时显示加载屏幕并预加载地图册

你可以试试看

中描述了另一种实现先加载资源再加载(并将所有内容保留在内存中)的方法


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

也有同样的问题,我在游戏中通过不使用地图集解决了这个问题。因此,请尝试以下示例:

-(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];

这要看你怎么说了。 如果需要永远运行动画,可以在上一个方法的末尾添加行:

SKAction *repeat = [SKAction repeatActionForever: animationTextures];

希望这能有所帮助。

我想这正是我正在做的,我在游戏出现之前预装纹理,并将它们保存在内存中(如我所说的数组中)。但在我称之为animateWithTextures之后仍然存在滞后。也许纹理地图集太大了?您必须平衡地图集的结构,并在提供最佳性能的内容之间进行选择。如果选择存储图像太少的地图集,SpriteKit可能需要大量绘制过程来渲染帧。如果您决定在一个图集中使用太多的图像,那么加载时将需要大量内存…您有多少个绘图过程?你是在设备上测试还是在模拟器上测试?我在设备上测试。我有几个地图集。最小的阿特拉斯有3次平局,最大的一次有46次。对不起,我想我们谈论的不是同一件事。你在游戏中的抽签数和节点数是多少?您可以使用SKView.showsDrawCount和showsNodeCount启用这些选项。此外,您可以像@sangony pointed那样优化动画,或者可能有助于减少动画中的图像数量并增加timePerFrame参数的值。33对于35个节点来说,绘制似乎太多,这可能会影响整体性能。您可以找到一些有用的信息,如忽略兄弟顺序、混合模式和绘图顺序。您可能使用了许多地图集,或者节点的组织方式使SpriteKit无法在一次过程中绘制多个节点。此外,我不能说这是导致animateWithTextures延迟的原因,尤其是在无法查看代码和地图集结构的情况下。如果您愿意,我可以为您提供一些关于性能提示的有用链接…请阅读“简化SpriteKit的动画处理”一节。
[self makePlayerAnimation:self.myNode];
SKAction *repeat = [SKAction repeatActionForever: animationTextures];