cocos2d学习一
2010-12-31 12:05
232 查看
本来下载了cocos2d-iphone-0.99.5源码打算好好学习一下,但是发现工程有点大了,有点晕。所以就下载了最旧的版本看,一步一步来,相信会有不少收获,果然0.1版本要小很多。(感谢cocos2d的作者们,哈哈)。
之前搞不懂 addChildren 里面 那个 z,是干嘛用的,怎么实现的。看了源码了解了。
//这是0.1版本的代码,那时还不叫addChildren
-(id) add: (CocosNode*) child z:(int)z name:(NSString*)name
{
NSArray *entry;//用来存,z(孩子的顺序),和孩子的 数组 //其实可以用字典吧
NSAssert( child != nil, @"Argument must be non-nil");
NSNumber *index = [NSNumber numberWithInt:z];
//eg 2,child2, 1,child1
entry = [NSArray arrayWithObjects: index, child, nil];//这里是添加
int idx=0;
BOOL added = NO;
//children 数组的数组, 子数组是一个 z,和孩子
//这方法不错 学习了
for( NSArray *a in children ) {
if ( [[a objectAtIndex: 0] intValue] > z ) {
added = YES;
[ children insertObject:entry atIndex:idx];
break;
}
idx++;
}
if( ! added )
[children addObject:entry];
if( name )
[childrenNames setObject:child forKey:name];//这里单独用一个NSMutableDictionary 来存放child的名字,暂时还不太理解
//这个child 就被保存了两次 为啥啊?
[child setParent: self];
if( isRunning )
[child onEnter];
return self;
}
比较一下0.99.5版本的代码
-(void) addChild: (CCNode*) child z:(int)z tag:(int) aTag
{
NSAssert( child != nil, @"Argument must be non-nil");
NSAssert( child.parent == nil, @"child already added. It can't be added again");
if( ! children_ )
[self childrenAlloc];
[self insertChild:child z:z];
child.tag = aTag;
[child setParent: self];
if( isRunning_ ) {
[child onEnter];
[child onEnterTransitionDidFinish];
}
}
-(void) insertChild:(CCNode*)child z:(int)z
{
NSUInteger index=0;
CCNode *a = [children_ lastObject];
// quick comparison to improve performance
if (!a || a.zOrder <= z)
[children_ addObject:child];
else
{
CCARRAY_FOREACH(children_, a) {
if ( a.zOrder > z ) {
[children_ insertObject:child atIndex:index];
break;
}
index++;
}
}
[child _setZOrder:z];
}
变化很大了,首先孩子的顺序不是单独的了,而是封装在孩子里面,孩子的名称也变为tag,更具用面向对象的思想吧,由于我才刚刚开始学习,所有还有什么意义我还不知道,慢慢进一步深入的学习了。
之前搞不懂 addChildren 里面 那个 z,是干嘛用的,怎么实现的。看了源码了解了。
//这是0.1版本的代码,那时还不叫addChildren
-(id) add: (CocosNode*) child z:(int)z name:(NSString*)name
{
NSArray *entry;//用来存,z(孩子的顺序),和孩子的 数组 //其实可以用字典吧
NSAssert( child != nil, @"Argument must be non-nil");
NSNumber *index = [NSNumber numberWithInt:z];
//eg 2,child2, 1,child1
entry = [NSArray arrayWithObjects: index, child, nil];//这里是添加
int idx=0;
BOOL added = NO;
//children 数组的数组, 子数组是一个 z,和孩子
//这方法不错 学习了
for( NSArray *a in children ) {
if ( [[a objectAtIndex: 0] intValue] > z ) {
added = YES;
[ children insertObject:entry atIndex:idx];
break;
}
idx++;
}
if( ! added )
[children addObject:entry];
if( name )
[childrenNames setObject:child forKey:name];//这里单独用一个NSMutableDictionary 来存放child的名字,暂时还不太理解
//这个child 就被保存了两次 为啥啊?
[child setParent: self];
if( isRunning )
[child onEnter];
return self;
}
比较一下0.99.5版本的代码
-(void) addChild: (CCNode*) child z:(int)z tag:(int) aTag
{
NSAssert( child != nil, @"Argument must be non-nil");
NSAssert( child.parent == nil, @"child already added. It can't be added again");
if( ! children_ )
[self childrenAlloc];
[self insertChild:child z:z];
child.tag = aTag;
[child setParent: self];
if( isRunning_ ) {
[child onEnter];
[child onEnterTransitionDidFinish];
}
}
-(void) insertChild:(CCNode*)child z:(int)z
{
NSUInteger index=0;
CCNode *a = [children_ lastObject];
// quick comparison to improve performance
if (!a || a.zOrder <= z)
[children_ addObject:child];
else
{
CCARRAY_FOREACH(children_, a) {
if ( a.zOrder > z ) {
[children_ insertObject:child atIndex:index];
break;
}
index++;
}
}
[child _setZOrder:z];
}
变化很大了,首先孩子的顺序不是单独的了,而是封装在孩子里面,孩子的名称也变为tag,更具用面向对象的思想吧,由于我才刚刚开始学习,所有还有什么意义我还不知道,慢慢进一步深入的学习了。
相关文章推荐
- 一本学习cocos2d的新书《Cocos2D权威指南》
- cocos2d-x-3.1 NotificationCenter (coco2d-x 学习笔记八)
- cocos2d-x-3.0rc1 学习笔记5 (几个最近用的多的动作) lua 写的
- Cocos2d-x学习笔记(九)—— 地图系统(地图编辑器,事件响应)
- cocos2d-x【小菜在学习】做个小游戏俄罗斯方块(一)
- ios开发学习--cocos2d(cocos2d)效果源码分享--系列教程
- Cocos2d-x精灵学习笔记
- Cocos2d-x UI学习笔记 分类: cocos2d代码编写 2015-07-27 18:10 5人阅读 评论(0) 收藏
- cocos2d android学习心得
- Cocos2d-x学习之windows 7 android环境搭建
- Cocos2d-x的学习之旅(六)输入框
- cocos2d-x 3.1.1 学习笔记[9]scheduler 调度器
- 【cocos2d-x 3.x 学习笔记】 HelloWorld —— 小程序大道理
- 我的Cocos2d-x学习笔记(五)CCLayer、CCLayerColor、CCLayerGradient、CCLayerMultiplex
- xCode-Cocos2D-X 学习与思考 (1) - 传说中的HelloWorld
- 学习手机游戏开发的两个方向 Cocos2d-x 和 Unity 3D/2D,哪个前景更好?
- IOS cocos2d学习笔记-<五>CCAction精灵运动
- Cocos2d-x学习笔记(一)---安装cocos2d-x
- cocos2d-x学习笔记11:xcode下编译运行helloworld
- 精通cocos2d-x必须要学习的内容 -沈大海cocos2d-x教程之4