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];
Надеюсь это поможет.