[cocos2d]关于CCSprite的若干问题与误区
2013-08-28 17:53
246 查看
文章 [cocos2d] 利用texture atlases生成动画 中介绍了如何生成动画并绑定在CCSprite实例上。
使用该代码遇到了几个问题,值得mark下
问题1、多实例
问题描述:
新建一个PlayerSprite类继承CCSprite,若在PlayerSprite类中使用文中代码生成会出现问题。
问题出现在于这句。
因为PlayerSprite已经是CCSprite类,当PlayerSprite实例化时,此行代码会再把CCSprite实例化,之后的动画会绑定在新的sprite上。
解决方法:
1、在PlayerSprite类中删除此句代码,并将之后的所有的sprite改成 self 即可。(注意最后还有一句addChild要删除)
即
CCSprite Source Code
解决方法:
同问题1,使用spriteWithXXX实例化即可
经验:
由此可以看出CCSprite与CCLayer,CCScene的继承类实例过程有不同的地方,
CCSprite的继承类用spriteWithXXX实例化的话,不会调用继承类的init方法,而只会调用CCSprite的init方法。
而对于CCLlayer与CCScene的继承类,因为是用XXLayer *layer = [XXLayer node]此类方式实例化,而 node实则上是[[[self alloc] init] autorelease]的缩写,会调用继承类的init方法。
问题3、贴图复用/获得已缓存的贴图
可能有人会发现在问题1、2中sprite使用的贴图是frameCache中获得的,那么有没方法获得已经缓存好的贴图而不是每次都要重新加载呢?
Learn iPhone and iPad Cocos2D Game Development一书中作者在第七章中介绍到一个比较好的方法
( Scrolling With Joy -> Advanced Parallax Scrolling -> Re-creating the Background in Code)
待续
使用该代码遇到了几个问题,值得mark下
问题1、多实例
问题描述:
新建一个PlayerSprite类继承CCSprite,若在PlayerSprite类中使用文中代码生成会出现问题。
//生成sprite(动画将绑定在sprite上) CCSprite *sprite = [CCSprite spriteWithSpriteFrame:[frameCache spriteFrameByName:@"1.png"]];
问题出现在于这句。
因为PlayerSprite已经是CCSprite类,当PlayerSprite实例化时,此行代码会再把CCSprite实例化,之后的动画会绑定在新的sprite上。
解决方法:
1、在PlayerSprite类中删除此句代码,并将之后的所有的sprite改成 self 即可。(注意最后还有一句addChild要删除)
即
@implementation CCSprite //.... -(id)initWithFile:(NSString*)filename{ //.....省略 CCTexture2D *texture = [[CCTextureCache sharedCache] addImage:filename]; if ( texture ){ CGRect rect = CGRectZero; rect.size = texture.contentSize; return [self initWithTexture:texture rect:rect]; } [self release]; return nil; } //..... @end
CCSprite Source Code
解决方法:
同问题1,使用spriteWithXXX实例化即可
PlayerSprite *sprite = [PlayerSprite spriteWithSpriteFrame:[frameCache spriteFrameByName:@"1.png"]]; [self addChild:sprite z:0 tag:1];
经验:
由此可以看出CCSprite与CCLayer,CCScene的继承类实例过程有不同的地方,
CCSprite的继承类用spriteWithXXX实例化的话,不会调用继承类的init方法,而只会调用CCSprite的init方法。
而对于CCLlayer与CCScene的继承类,因为是用XXLayer *layer = [XXLayer node]此类方式实例化,而 node实则上是[[[self alloc] init] autorelease]的缩写,会调用继承类的init方法。
问题3、贴图复用/获得已缓存的贴图
PlayerSprite *sprite = [PlayerSprite spriteWithSpriteFrame:[frameCache spriteFrameByName:@"1.png"]];
可能有人会发现在问题1、2中sprite使用的贴图是frameCache中获得的,那么有没方法获得已经缓存好的贴图而不是每次都要重新加载呢?
Learn iPhone and iPad Cocos2D Game Development一书中作者在第七章中介绍到一个比较好的方法
( Scrolling With Joy -> Advanced Parallax Scrolling -> Re-creating the Background in Code)
待续
相关文章推荐
- [cocos2d]关于CCSprite的若干问题与误区
- cocos2d-x 关于是否继承CCSprite,以及关于继承初始化时候的未知问题
- [cocos2d-x]关于是否继承CCSprite,以及关于继承初始化时候的未知问题
- 【iOS-Cocos2d游戏开发】关于CCSpriteSheet报错问题
- 【iOS-Cocos2d游戏开发】关于CCSpriteSheet报错问题
- cocos2d-x 关于是否继承CCSprite,以及关于继承初始化时候的未知问题
- 关于多线程栈空间的若干问题
- 关于Windows7下创建Cocos2D-X项目的小问题
- 十八届三中全会关于全面深化改革若干重大问题的决定
- 关于oracle存储过程的若干问题备忘
- 彻底学会使用epoll(六)——关于ET的若干问题总结
- 关于Cocos2d-x中使用完Blink动作后精灵突然消失的问题的解决
- 关于最优化中的若干问题
- 关于cocos2d-x的一些问题
- 中共中央关于全面深化改革若干重大问题的决定 (zz)
- 关于 cocos2d1.3 版本的问题
- Csdn Blog 开发团队致广大网友的一封信-“关于评论数不更新等若干问题的说明”
- 最高人民法院关于审理劳动争议案件适用法律若干问题的解释
- Cocos2D v3.x中关于重叠触摸层优先级的问题
- 关于ARM的若干问题