我是 Cocos2d 的新手,过去 3 天一直在尝试加载多包精灵表动画。
我找不到教程或工作示例,并查看了raywenderlich.com并找到了这篇讨论单文件精灵表动画的帖子:示例 1
此示例 2也无法正常工作:
那么如何加载多包精灵表呢?
谢谢
我添加了部分有效的代码。问题是: 1) 文件 -ipadhd 和 -hd 未按预期识别(在其他动画中它们被识别,因此 AppDelegate 中的设置正常) 2) 加载多包动画时,我得到一个异常文件示例:apple0.png , apple0.plist, apple0-hd.png ,apple0-hd.plist, apple1-hd.png, apple1-hd.plist, apple0-ipadhd.png, apple0-ipadhd.plist, apple1-ipadhd.png, apple1-ipadhd .plist
NSFileManager *fileManager = [NSFileManager defaultManager];
BOOL exists = YES;
int plistIndex = -1;
int tmpPlistIndex;
NSMutableArray *availablePLists = [NSMutableArray array];
NSMutableArray *imageFrames = [NSMutableArray array];
NSMutableArray *spriteSheets = [NSMutableArray array];
frameCount = 0;
do {
plistIndex +=1;
NSString* plistFileName = [NSString stringWithFormat:@"%d%@",plistIndex,item.fileName];
plistFileName = [[NSBundle mainBundle] pathForResource:plistFileName ofType:@"plist"];
plistPath = plistFileName;
[availablePLists addObject:plistPath];
plistDict = [[NSDictionary alloc] initWithContentsOfFile:plistPath];
frames = [plistDict objectForKey:@"frames"];
frameCount += frames.count;
tmpPlistIndex = plistIndex + 1;
plistFileName = [NSString stringWithFormat:@"%d%@",tmpPlistIndex,item.fileName];
plistFileName = [[NSBundle mainBundle] pathForResource:plistFileName ofType:@"plist"];
exists = [fileManager fileExistsAtPath:plistFileName];
} while (exists);
NSLog(@"frame count is: %d",frameCount);
plistIndex = -1;
exists = YES;
for(NSString *availablePList in availablePLists)
{
plistIndex += 1;
plistDict = [[NSDictionary alloc] initWithContentsOfFile:availablePList];
NSLog(@"PLIST FILE NAME = %@",availablePList );
frames = [plistDict objectForKey:@"frames"];
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:availablePList];
NSString* imageFileName = [NSString stringWithFormat:@"%d%@.png",plistIndex,item.fileName];
// NSDictionary* metadata = [plistDict objectForKey:@"metadata"];
// NSString* imageFileName = [metadata objectForKey:@"realTextureFileName"];
CCSpriteBatchNode *spriteSheet = [CCSpriteBatchNode batchNodeWithFile:imageFileName];
[self addChild:spriteSheet z:100];
item.spriteSheet = spriteSheet;
[spriteSheets addObject:spriteSheet];
for (int i=0; i<frameCount; i++) {
NSString * fileToLoad;
if(i<10){
fileToLoad = [NSString stringWithFormat:@"%@/000%d",item.fileName,i];
}
else if (i<100){
fileToLoad = [NSString stringWithFormat:@"%@/00%d",item.fileName,i];
}
else{
fileToLoad = [NSString stringWithFormat:@"%@/0%d",item.fileName,i];
}
if ([frames objectForKey:fileToLoad]){
NSLog(@"Found : %@",fileToLoad);
[imageFrames addObject:
[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:fileToLoad]];
}
}
}//End available plists
item.spriteAnimation = [CCAnimation animationWithSpriteFrames:imageFrames delay:0.1f];
NSString* spriteImageName = [NSString stringWithFormat:@"%@/0000",item.fileName];
NSLog(@"IMAGE LOADING spriteImageName : %@",spriteImageName);
item.sprite = [CCSprite spriteWithSpriteFrameName:spriteImageName];
NSLog(@"IMAGE LOADED spriteImageName : %@",spriteImageName);
CGPoint point = item.itemInfo.position;//info.position;
CGPoint pointScaled = [self scalePoint:point];
item.sprite.position = pointScaled;
NSLog(@"POS name-%@ pos (%f, %f)",item.name,item.sprite.position.x,item.sprite.position.y);
item.sprite.anchorPoint=ccp(0, 0);
for(CCSpriteBatchNode* spriteSheet in spriteSheets){
//[spriteSheet addChild:item.sprite];
[self addChild:item.sprite];
}