Iphone 如何使用cocos2d图像数组更改精灵图像?

Iphone 如何使用cocos2d图像数组更改精灵图像?,iphone,objective-c,cocos2d-iphone,Iphone,Objective C,Cocos2d Iphone,我正在学习Cocos2d并构建一个应用程序,其中一端有精灵,另一端需要通过它,同时我将精灵从屏幕上移除,一段时间后,我将显示相同的精灵 现在,我的应用程序中有一个图像文件夹,每次我都需要从同一文件夹中随机加载不同的图像,并维护一个日志,确保这些图像不会重复。我可以通过以下方式从文件夹加载图像: NSString *bundleRoot = [[NSBundle mainBundle] bundlePath]; NSArray *dirContents = [[NSFileManager defa

我正在学习Cocos2d并构建一个应用程序,其中一端有精灵,另一端需要通过它,同时我将精灵从屏幕上移除,一段时间后,我将显示相同的精灵

现在,我的应用程序中有一个图像文件夹,每次我都需要从同一文件夹中随机加载不同的图像,并维护一个日志,确保这些图像不会重复。我可以通过以下方式从文件夹加载图像:

NSString *bundleRoot = [[NSBundle mainBundle] bundlePath];
NSArray *dirContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:bundleRoot error:nil];
NSArray *onlyJPGs = [dirContents filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self ENDSWITH '.jpg'"]];

现在我如何调用这个数组,每次显示不同的图像,并维护一个日志,使图像不会重复。我已经通过像和,但在韦尔链接。任何线索都会非常有用。提前谢谢你的帮助

最好的方法是创建一个精灵表。首先,您可以免费获得,您可以创建用于cocos的spritesheet(在导出器上,确保选择cocos2d以创建适当的plist)

您希望将所有图像打包为一个大纹理,以便使用plist将其添加到项目中(zwoptex将为您创建这两个纹理)

然后你可以加载你的纹理

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"your_plist"];
切换纹理是一个缓慢的操作,因此在相同的纹理中拥有所有的图像将提高openGL的性能,在您完成这一操作之后,更改sprite的纹理是非常容易的

[yourSprite setDisplayFrame:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"FRAME_NAME"]];
其中FRAME_NAME是plist中的帧的名称(您可以通过在xcode中选择plist来查看它)

要以随机方式循环而不重复图像。。。 (我将在这里直接编写一些伪代码,让我在类声明和内联实现中进行初始化:)

@结束

和显示随机帧:

-(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];

}
谢谢你,奥特科恩……)让我实现同样的目标,然后再回到你身边。我想这对我会有用的。。
-(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];

}