做到这一点的最好方法是创建一个spriteSheet。首先你可以得到http://zwoptexapp.com/,它的免费,你可以创建你的spritesheet使用科科斯(在出口商请确保你选择cocos2d创建适当的plist)
你想打包所有图像在1大纹理这样你就可以用plist中它添加到您的项目(zwoptex将创建两个你)
那么你就可以
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"your_plist"];
切换纹理加载纹理操作慢,所以有在所有图像在完成对spri的纹理更改后,相同的纹理将提升openGL的性能TE是很容易
[yourSprite setDisplayFrame:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"FRAME_NAME"]];
其中FRAME_NAME是在plist中框架的名称(您可以通过选择里面的Xcode plist中看到它。
以随机的方式循环,而不必重复图片... (我会直接在这里写一些伪代码,让我做inits类的声明和内联实现:)内)
//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];
}
感谢您Ultrakorne .. :)让我实现了相同的回来给你。我想这对我很有用。 – Sarah 2012-01-18 09:44:37