Sprite Kit animate с текстурными лагами

Я использую атласы текстур в моей игре Sprite Kit. Я создаю SKTextureAtlas Объект и сохранить его текстуры в массиве для каждой анимации. Поэтому, когда мне нужна анимация моего героя, я звоню animateWithTextures отправив ему соответствующий массив. Есть некоторые лаги, когда я запускаю анимацию. Есть ли способ запустить анимацию плавно?

2 ответа

Я уверен, что есть несколько способов обойти это. Что вам нужно сделать, это предварительно загрузить атласы до того, как ваш игровой процесс начнется. Просто покажите экран загрузки в начале игры и предварительно загрузите свои атласы.

Вы можете попробовать с + preloadTextureAtlases: withCompletionHandler:

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

Еще один способ реализовать загрузку ресурсов до всего остального (и сохранить все в памяти) описан здесь, в примере игры Adventure.

Подробнее о асинхронной загрузке ресурсов можно узнать из кода, который можно скачать по ссылке выше.

Была та же проблема, и я решил ее в своей игре, не используя атласы. Итак, попробуйте этот пример:

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

Надеюсь это поможет.

Другие вопросы по тегам