2010-07-22 68 views
0

基本上我有一个精灵的数组加载和删除一个接一个的顺序。 我有动物名称的列表中像与精灵的麻烦(加载和删除)-cocos2d iphone

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

如果它工作的第20,这听起来像你可能有一个坏的图像或为21图像错误的文件名。如果您尝试从不支持或不存在的图像创建精灵,那么您会遇到崩溃。

检查并确保所有列出的文件名实际上是你的包内(检查的情况下,也因为他们是区分大小写!)。确保文件名完全匹配 - 在上面粘贴的代码示例中,它看起来像标题中有空格。

如果这些文件都在那里,请确保你没有他们中的一个保存为Photoshop文档,而不是为.png文件什么的。即使文件名以.png结尾,也不表示它以该格式保存。

+0

非常感谢您的回复。 我检查了每个图像的扩展名,大小写,位置,但仍然崩溃。 我甚至改变了图像集,但仍然在第20张图像后崩溃。 – Muniraj 2010-07-23 07:24:49

+0

你可以发布更多的代码吗?向我们展示整个代码块。 – 2010-07-28 15:40:48

0

从您的问题描述甚至有可能是一个坏指数,你只是递增界限之类的东西了。清除它的最好方法是做一些基本的调试。

  1. 将最后一项放在 的中间。它最后一个还是在 上还是在同一个条目上没有 它在什么位置?
  2. 删除有问题的项目,看看是否 代码工作没有它
  3. 跟踪直通的代码,看到了 入口点在那里它吹起来, 检查堆栈跟踪等。
+0

嗨,thanx的回复 我试着更换项目,并删除它,但它仍然没有工作。 – Muniraj 2010-07-26 17:57:01

0

要验证您的所有文件都ok尝试加载每一个手动不使用数组一样(把一个破发点上的每一行,并使用构建&调试):

(pseudo code) 
add the lion sprite 
add the tiger sprite 
add the bear sprite 
...etc... 

如果这样的作品,然后通过不使用循环测试你的阵列来加载精灵,通过调用它的指数一样载入每一个(把一个破发点上的每一行,并使用构建&调试):

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

我喜欢把我的精灵在数组中,当我需要处理数组时,只需遍历数组就可以轻松完成。另外,我不喜欢使用绝对坐标,而是喜欢使用与窗口大小和精灵大小相关的坐标。通过这种方式进行定位,无论您使用何种类型的显示或方向或精灵大小,它都会转换坐标。

希望这会有所帮助!