cocos2d 学习笔记 2
CCSpriteBatchNode的作用很像CCLayer,因为它本身并不显示在屏幕上。
不过 你只能把CCSprite加入CCSpriteBatchNode。
CCSpriteBatchNode 将一个图片文件名作为参数,使用这个参数的原因是所有被添加进 CCSpriteBatchNode的CCSprite节点都必须使用同一个图片文件。如果你没有在
CCSprite中使用相同的图片,你将会在调试窗口中得到以下报错信息:
SpriteBatches[13879:207] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'CCSprite is not using the same texture id'
一个通常会犯的致命错误 Sprite01项目展示了一个新的Objective-C开发者通常会犯的错误。你很容易犯 这个错误,但是又很难找到它。请查看一下列表6-2中的代码,你能看到哪里出 错了吗?
列表6-2.一个通常在继承CCSprite(或者其它类)时会犯的致命错误
‐(id) init { if ((self = [super initWithFile:@"ship.png"])) { } return self; [self scheduleUpdate]; }
上述代码的问题是:-(id)init这个方法是默认的初始化方法,它最终会被任何 特殊的初始化方法(比如initWithFile)所调用。因为上述代码又调用了
[super initWithFile:..]这个特殊的初始化方法,最终产生了一个死循环。 解决的方法很简单。你只要像列表6-3所示那样把初始化方法换一个名字(只要
不是-(id)init)就可以了。