2013-04-06 3 views
0

Я хотел бы знать, как люди обычно сохраняют анимации, чтобы легко загрузить их в Cocos2d с максимально возможным количеством жесткого кода.Экспорт spritesheet для cocos2d

E.G. Решение, о котором я думал, состоит в том, чтобы иметь один файл plist, содержащий информацию о каждом кадре, и второй plist, чтобы содержать информацию о каждой анимации (название анимации, кадры для воспроизведения и вероятность задержки).

Если это правильное решение, как я могу автоматически создавать такие файлы plist для спрайтов?

ответ

0

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

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"gameSprites.plist"];

Кроме того, вы можете использовать именование для кадров анимации, например, суффикс их «_index»: animFrame_1, animFrame_2, и т. д. ...

Тогда вы можете иметь категорию CCAnimation с помощниками для загрузки анимаций с учетом имени анимации и количества кадров. В качестве примера можно привести следующий код. -

+ (CCAnimation *) animationWithFrame:(NSString *) frame frameCount:(int) frameCount startIndex:(int) startIndex delay:(float) delay separator:(NSString *) separator { 
    // load the ship's animation frames as textures and create a sprite frame 
    NSMutableArray* frames = [NSMutableArray arrayWithCapacity:frameCount]; 
    CCSpriteFrameCache* frameCache = [CCSpriteFrameCache sharedSpriteFrameCache]; 

    int end = frameCount + startIndex; 
    for (int i = startIndex; i < end; i++) 
    { 
     NSString* file = [NSString stringWithFormat:@"%@%@%i.png", frame, separator, i]; 
     CCSpriteFrame* frame = [frameCache spriteFrameByName:file]; 
     [frames addObject:frame]; 
    } 
    // Return an animation object from all the sprite animation frames 
    return [CCAnimation animationWithFrames:frames delay:delay]; 
} 

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

+0

и где я могу получить frameCount для определенной анимации? Я думаю, что жесткое кодирование будет неэффективным, когда у меня будет много анимаций. Было бы гораздо лучше прочитать эту информацию из .plist. Может, например, Zwoptex хранит где-нибудь информацию о framecount для определенных анимаций? возможно, генерирует вторичный plist, или что бы там ни было? – Terko

+0

Вы правы, но, к сожалению, Zwoptex не позволяет добавлять такие метаданные, обычно у меня есть набор констант/enum, чтобы сохранить анимацию frameCounts. LevelHelper обладает большим контролем над информацией о анимациях, но если вам нужно только для управления количеством кадров анимации, это, вероятно, не стоит. В этом случае было бы быстрее написать собственное сопоставление анимации имени анимации plist. – ssantos

+0

Хорошо, спасибо вам в любом случае! – Terko

 Смежные вопросы

  • Нет связанных вопросов^_^