.Анимационные изображения API Cocos 2D?

#ios #uiimageview #cocos2d-iphone #ccsprite

#iOS #uiimageview #cocos2d-iphone #ccsprite

Вопрос:

Я хочу сделать что-то похожее на API в UIImageView, где вы предоставляете, скажем, 5 изображений, и через определенное время UIImageView будет переключаться между этими изображениями. Я хочу сделать это в CCSprite, но единственные способы, которые я слышу об этом, — это настройка фреймов узла или что-то в этом роде.

Кто-нибудь знает простой способ добиться чего-то подобного, когда я предоставляю, скажем, 5 изображений, и я хочу, чтобы они проходили через них за 4 секунды?

Спасибо!

Ответ №1:

     //initialize anitmation
    CCAnimation *anime= [[CCAnimation alloc] initWithName:@"anime" delay:4.0];

    for(int i = 1; i <= 5; i  ){
            [anime addFrameWithFilename:[NSString  stringWithFormat:@"frame%d.png", i]];
    }

    id animeAction = [CCRepeatForever actionWithAction:[CCAnimate actionWithAnimation:anime]];

   [self runAction:animeAction];
 

Он принимает 5 изображений и анимирует их за 4.0 периода.

—— Редактировать —— Вот как вы можете это сделать с помощью нового Cocos2d Api 1.0.1 :

     //initialize anitmation
    CCAnimation *anime= [CCAnimation animation];
    anime.delay = 4.0;

    for(int i = 1; i <= 5; i  ){
            [anime addFrameWithFilename:[NSString  stringWithFormat:@"frame%d.png", i]];
    }

    id animeAction = [CCRepeatForever actionWithAction:[CCAnimate actionWithAnimation:anime]];

   [self runAction:animeAction];
 

Комментарии:

1. Вау, это превосходно! 2 вопроса: 1. Если у меня есть 5 изображений, означает ли это, что у меня есть 5 строк ..addFrameWithFileName ? 2. Будет ли эта анимация выполняться бесконечно?

2. На самом деле есть проблема с этим кодом. Нет такого API, как initWithName, есть только initWithFrames . Если бы вы намеревались использовать initWithFrames, как бы мы модифицировали код, чтобы он все равно достигал того же результата? Также игнорируйте этот вопрос о том, будет ли он выполняться бесконечно. Но каким будет ответ и на # 1?

3. Вот документация cocos2d для класса CCAnimation . Вы можете проверить это и посмотреть initWithName : cocos2d-iphone.org/api-ref/0.9.0-beta2 /…

4. Что касается вашего первого комментария, q1 да, у вас будет 5 строк adframewithfilename и да, он также запускает анимацию на неопределенный срок

5. @tylerdurden вы ссылались на полностью устаревшую (январь 2010) версию ссылки на API. Может быть, вам следует обновить свои закладки? 😉 Вот наиболее обновленный (и полный) Ссылка на API: learn-cocos2d.com/api-ref/latest/cocos2d-iphone/html /…

Ответ №2:

Создайте 5 спрайтов с 5 разными изображениями. Поместите их все в одно и то же положение. Установите 4 спрайта невидимыми (sprite.visible = НЕТ).

Если вы хотите изменить спрайты, вам нужно только установить для другого спрайта значение visible, а для текущего видимого — значение invisible. Вы также можете применить такие действия, как CCFadeTo, для исчезновения одного спрайта при одновременном исчезновении другого.

Если вы используете затухание, убедитесь, что вы по-прежнему устанавливаете свойство visible из соображений производительности. Спрайты с непрозрачностью 0 по-прежнему отображаются, в то время как спрайты, которые не видны, не отображаются.

Комментарии:

1. Хороший ответ. Как мне установить продолжительность, хотя, как я могу это сделать?

2. [self scheduleSelector:@selector (nextSprite:) интервал: 4];

3. Запланированный селектор — один из способов сделать это, вы также можете использовать действие CCSequence.

Ответ №3:

Взгляните на CCAnimation , CCAnimate и CCSpriteFrame классы.

CCSpriteFrame Представляет собой фрагмент более крупной текстуры, известной как лист спрайтов. Вы можете поместить свои пять изображений на один лист.

CCAnimation позволяет создать анимацию из последовательности таких кадров и задать скорость, с которой выполняется анимация.

И CCAnimate позволяет запускать эту анимацию как действие:

 [node runAction:[CCAnimate actionWithAnimation:animationInstance restoreOriginal:NO]];
 

.

Ссылки

Ссылка на класс CCSpriteFrame

Ссылка на класс CCAnimation

Ссылка на класс CCAnimate

Zwoptex для создания спрайтовых листов — также есть бесплатная флеш-версия

Комментарии:

1. Я бы предпочел не использовать лист спрайтов в моем случае, так как все ресурсы в моем проекте уже есть, и в этом случае мне пришлось бы много переделывать, чтобы получить фактический лист спрайтов в проекте! Могу ли я сделать это с отдельными изображениями?

2. Ты можешь. Просто создайте CCSpriteFrames с помощью CCSprites: CCSpriteFrame *frameVersionOfSprite = [spriteYouveAlreadyCreated displayedFrame]

3. Пример кода, предоставленный @tylerdurden, очень полезен для вашего конкретного случая, и наши ответы хорошо дополняют друг друга, один из них предоставляет фон, другой — пример кода.