基本上我有一个Sprite的数组,可以按顺序逐个加载和删除。 我有一个像
这样的数组中的动物名称列表 const NSString *Animal1[30] = {@"Lion .png",@"Zebra .png",...........
要加载精灵我使用以下代码
image[i]= [Sprite spriteWithFile: [NSString stringWithFormat:@"%@",Animal1[i]]];
image[i].position = ccp( 240,180 );
[self addChild: image[i]];
然后在使用后删除精灵我使用以下代码
[self removeChild:image[i] cleanup:YES];
当我在模拟器中运行代码时,精灵会一个接一个地加载到20个动物。在第20只动物之后,应用程序崩溃了。 我不知道是什么问题。如果我的阵列小于20,它工作正常,但当它超过应用程序崩溃。 任何人都可以帮助解决问题。
答案 0 :(得分:0)
如果它适用于前20个,则听起来您可能有第21个图像的错误图像或错误的文件名。如果您尝试从不受支持或不存在的图像创建精灵,那么您将会崩溃。
检查并确保列出的所有文件名实际上都在您的包中(检查大小写,因为它们区分大小写!)。确保文件名完全匹配 - 在上面粘贴的代码示例中,标题中看起来有空格。
如果文件全部存在,请确保您没有将其中一个保存为Photoshop文档而不是.png或其他内容。即使文件名以.png结尾,也不意味着它以该格式保存。
答案 1 :(得分:0)
答案 2 :(得分:0)
要验证所有文件都正常,请尝试手动加载每个文件,而不是使用类似的数组(在每一行上放置一个断点并使用Build& Debug):
(pseudo code)
add the lion sprite
add the tiger sprite
add the bear sprite
...etc...
如果可行,那么通过不使用循环加载精灵来测试你的数组,通过调用它的索引来加载每个精灵(在每一行上放一个断点并使用Build& Debug):
(pseudo code)
add image[1]
add image[2]
add image[3]
...etc...
然后,如果这样可以正常工作,我会将你的精灵设置为精灵数组,如:
(pseudo code)
create the sprite with image[i]
add the sprite to spriteArray
---repeat for each sprite---
然后再做一个循环,将精灵添加到图层中,如:
CGSize size = [[CCDirector sharedDirector] winSize];
for CCSprite *aSprite in SpriteArray {
aSprite.position = ccp((size.width - (aSprite.contentSize.width / 2)), (aSprite.contentSize.height / 2)); //positions the sprite to the lower right corner
[self addChild aSprite];
}
我喜欢把我的精灵放在一个数组中,这样当我需要使用它们时,更容易遍历数组。另外,我不是使用绝对坐标,而是使用相对于窗口大小和精灵大小的坐标。通过这种方式定位,它将转换坐标,无论您使用何种类型的显示或方向或精灵大小。
希望这有帮助!