Sprite Kit Animation: Ошибка Атласа

Я перетащил атлас текстур в свой проект. Картинки названы правильно ("heliani_1-9") Анимация работает плавно, за исключением 3-х кадров, которые отображаются в виде большого красного креста на белом фоне. (См скриншот во вложении)

введите здесь описание изображения

Что не так с моим кодом?

Ваше здоровье

#import "MRMPlayer.h"

@implementation MRMPlayer

-(instancetype)init
{
    self = [super init];
    {

        [self setupAnimations];

        [self runAction:[SKAction repeatActionForever:[SKAction animateWithTextures:self.runFrames timePerFrame:0.5 resize:YES restore:NO]] withKey:@"heli"];

        self.name = playerName;
    }
    return self;
}


-(void) setupAnimations{
    self.runFrames = [[NSMutableArray alloc]init];
    SKTextureAtlas *heliAtlas = [SKTextureAtlas atlasNamed:@"heli"];

    for (int i = 0; i < [heliAtlas.textureNames count]; i++) {
        NSString *tempName = [NSString stringWithFormat:@"heliani_%d",i];
        SKTexture *tempTexture = [heliAtlas textureNamed:tempName];
        if(tempTexture) {
            [self.runFrames addObject:tempTexture];
        }
    }
}


@end

person Objective D    schedule 07.05.2014    source источник
comment
Большой красный крестик означает, что изображения не были найдены в вашем атласе. Убедитесь, что у вас есть все изображения, которые, как вы думаете, есть для вашей анимации в вашем атласе.   -  person sangony    schedule 08.05.2014
comment
Я знаю, проверял несколько раз. Они есть и названы правильно. Я даже свой проект несколько раз чистил, пробовал с переименованными, не избавляется. s7.directupload.net/images/140507/rxv7kwtk.png   -  person Objective D    schedule 08.05.2014
comment
Я заметил своим большим глазом, что изображение 6 имеет несоответствие имен :) Не уверен, что это может быть причиной всех ваших проблем, но, безусловно, способствует.   -  person sangony    schedule 08.05.2014
comment
Спасибо, как я могу не заметить что-то подобное? :D К сожалению, ошибка все еще появляется :(   -  person Objective D    schedule 08.05.2014
comment
Я не вижу ничего плохого в вашем опубликованном коде. Ошибка может быть в ваших реальных изображениях или в чем-то еще. Я предлагаю вам попробовать Texture Packer. Он создает атласы текстур и даже делает анимацию. Вы можете скачать бесплатную копию здесь codeandweb.com/texturepacker.   -  person sangony    schedule 08.05.2014
comment
Ура m8, я попробую этот :D   -  person Objective D    schedule 08.05.2014


Ответы (1)


Перейдите в меню продукта, и вы увидите опцию Clean.

Теперь, удерживая кнопку option на клавиатуре, текст должен измениться на Clean build folder....

Выберите этот вариант, и он дополнительно удалит папку производных данных, которая кэширует множество вещей, включая атлас текстур, и я обнаружил, что это вызывает проблемы, подобные описанным вами. Если вы переименовываете файлы в атласе, обычно я сам сталкивался с этой проблемой.

Мне не нравится, что эта опция — это то, над чем вам нужно работать, было бы неплохо иметь эту вторую опцию БЕЗ необходимости удерживать нажатой клавишу выбора.

Если это не решит проблему, у вас действительно проблемы с именами.

Примечание. Вы также можете удалить папки производных данных из окна Организатора.

person prototypical    schedule 08.05.2014
comment
Спасибо, но ошибка осталась. Я создам новые PNG самостоятельно и попробую еще раз. Мне нужен один голос, чтобы голосовать за комментарии (на данный момент у меня их 14). Пожалуйста, дайте мне один голос, и я поддержу ваш ответ. Ваше здоровье - person Objective D; 08.05.2014
comment
Я бы проверил ваши имена файлов на наличие отличий от того, что ищет ваш код. Кадры для анимации единственные в атласе? Вы используете свойство count атласа в цикле для определения номеров кадров. Итак, если в этом атласе есть другие текстуры, кроме вашей анимации, это также может вызвать ту же проблему. - person prototypical; 08.05.2014
comment
Хорошо, только что заметил, что вы начинаете свой цикл с 0, а в вашем атласе нет heliani_0. Это может привести к большому красному крестику. Вы делаете тест, чтобы увидеть, существует ли текстура, возможно, добавьте туда NSLog, чтобы вы могли видеть, является ли этот тест ложным, если 0 является индексом. - person prototypical; 08.05.2014
comment
Благодарю вас, сэр! Конечно, это было проблемой. Мне нужно было начать с 1 вместо 0. Вы лучшие! Большое спасибо! - person Objective D; 08.05.2014