Лучший способ сделать это - создать spriteSheet.Прежде всего вы можете получить http://zwoptexapp.com/, это бесплатно, и вы можете создать свою таблицу спрайтов для использования с кокосами (в экспортере убедитесь, что вы выбрали cocos2d для создания правильного списка)
Вы хотите упаковатьвсе ваше изображение в 1 большой текстуре, так что вы можете добавить его в свой проект с помощью plist (zwoptex создаст оба для вас)
, затем вы можете загрузить свою текстуру с
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"your_plist"];
переключением текстурэто медленная операция, поэтому наличие всех изображений в одной и той же текстуре повысит производительность openGL, после того как вы сделали, что изменить текстуру для спрайта очень легко
[yourSprite setDisplayFrame:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"FRAME_NAME"]];
, где FRAME_NAME - это имякадр в листе (вы можете увидеть его, выбрав список внутри кода xcode.
для случайного цикла без повторения изображений ... (я напишу здесь немного псевдокода, позвольте мне делать внутриобъявление класса и встроенные реализации :))
//WARNING THIS IS PSEUDO CODE :)
@interface Randomizer {
//an array of NSStrings containing all you images names
NSMutableArray *allImagesFrameNames = [NSMutableArray arrayWithCapacity:NUM_FRAMES];
CCSprite *sprite = alloc init
}
-(void) resetAllFrames {
[allImagesFrameNames removeAllobjects];
[allImagesFrameName addObject:@"FIRST_IMAGE"];
[allImagesFrameName addObject:@"SECOND_IMAGE"]; //add all your images
}
@ end
И для отображения случайного кадра:
-(void) display a randomImage {
//if the array is empty, all images are already been randomly displayed, so we reset the array
if([allImagesFrameName count] == 0)
[self resetAllFrames];
//we choose a random index
int randomIndex = arc4random %[allImagesFrameName count];
//we get the frame name at that index
NSString *imageFrameName = [allImagesFrameNames objectAtIndex:randomIndex];
//and we display the frame
[sprite setDisplayFrame:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:imageFrameName]];
[allImagesFrameNames removeObjectAtIndex:randomIndex];
}