learn iphone and ipad cocos2d Game Development读书笔记

来源:互联网 发布:算法1mints.txt 编辑:程序博客网 时间:2024/05/29 19:32

1.         "fps_images.png"cocos2d用来显示帧率的,即每秒显示的帧数,不能删除或者修改此图片。

 

2.         Cocos2d管理内存方法:

1)           对象实例化调用静态方法:node

             egCCNode* myNode = [CCNode node];

2)           实例化一个对象,以后还要用到最好的办法是:把myNode加入到继承于CCNOde的类中,设置好tag值,用到时候再用getChiledByTag方法提取出

3)         来。详见第二章第15

 

3.         _cmd关键词是当前方法的缩写。

4.         The Director

1)         Director保存着cocos2d的全局配置设定,同时管理着cocos2d的场景。

2)         Director的主要用处如下:

a)         访问和改变场景。

b)         访问cocos2d的配置细节。

c)         访问试图(OpenGLUIViewUIWindow

d)         暂停,恢复和结束游戏。

e)         UIKitOpenGL之间转换坐标。

3)         存在四种类型的Director

a)         CCDisplayLinkDirector,最常用,内部使用了苹果的CADisplayLink类,在IOS3.1以上版本才能用。

b)         CCFastDirector,其次的选择。

c)         CCThreadedFastDirector,可以让Cocoa Touch视图和cocos2d一同工作。缺点很耗电。

d)         CCTimerDirector他是四种director中最慢的。

 

5.         PushingPoping

1)           1>作用:不从内存中移除旧场景的情况下运行新的场景,目的是让转换场景的速度更快。

2)           2>副作用:导致内存使用增加。

3)           3>主要应用:在很多地方使用一个通用的场景,如:弹出设置菜单。好处,不再需要跟踪“设置场景”最后一次是在哪里打开的。

 

6.         CCLayer普通触摸及针对性触摸

1)           1>区别:针对性触摸接收的是一次触摸,普通是接收到一组触摸。

2)                   针对性处理允许你把某些触摸事件从队列中移除。其他CCLayer就接收不到此触摸,提高效率。

  2>应用:模糊

 

7.         CCSprite

1)           1>精灵贴图中心点和精灵左下角位置一致。

 

8.         精灵的定位点CCSpriteanchorPoint

1)           概念模糊

 

9.         贴图尺寸为2n次方

1)           1>否则IOS系统则用最小的2n次方的尺寸存放此图片,这样就扩大了内存的占有量。

2)           2>contentSize属性返回的是实际图片大小。

 

10.     addChild中的z参数决定了节点的绘制顺序。拥有最小z值的节点会首先被绘制,拥有最大z值的节点最后一个被绘制。如果多个节点拥有相同的z值,他们的绘制顺序将由他们的添加顺序来决定。

 

11.     不要在for或者其他循环里的条件判断中调用数组count方法,这样可以节省几个cpu循环。

   如果数组在循环中被更改了(删除或者增加元素),则要在循环判断处调用获取数组count的方法。

 

12.     CCLabel文字更新速度很慢,因为CCLabel上面的文字实际是贴图,它需要通过IOS的字帖渲染方法来生成,同时还要兼顾分配一个新的贴图和释放旧的贴图。CCLabel只是用于一次生成,不再改变的文字显示,当然改变频率比较慢也没什么问题

 

13.     播放声音用SimpleAudioEngine

1)         播放背景乐格式最好是mp3.

2)         音效最好格式是caf

 

14.     CCDirector replaceScene方法调用(对内存的使用的优化非常重要)

1)         CCDirector replaceScene方法替换场景时,每个节点都会调用CCNode所带的三个方法。这三个方法是:onEnteronEnterTransitionDidFinishonExit

2)         当两个场景切换时(第一个场景为A,第二个场景为B),调用顺序如下:

SceneB init

SceneB onEnter

SceneA onExit

SceneB onEnterTransitionDidFinish

SceneA dealloc

3)         节省内存的方法

如果想在onEnterTransitionDidFinish方法中分配很耗内存的节点的话,你必须先预约一个方法或者selector,至少等到下一帧时才分配内存,这样你就可以确保之前的场景已从内存中释放。另一个策略是在上一个场景的onExit方法里释放尽可能多的内存。

4)         解决场景切换延迟方案。

场景的生成早于场景过渡效果的开始。如果在init或者onEnter方法中执行很复杂的代码或加载很多素材的话,就会产生延迟。解决办法是插入一个加载场景。

5)         永远不要在一个节点的init方法中调用CCDirectorreplaceScene方法。

Director无法容忍一个节点在初始化的同时进行场景替换

15.     CCSpriteBatchNode精灵批处理

1)         当你使用CCSprite的时候,每生成一个CCSprite节点都会调用一次渲染方法,每一次渲染方法调用导致的系统开销叠加起来会使游戏的帧率大约降低15%或者更多。

2)         当需要显示两个或者更多个相同的CCSprite节点时,你可以使用CCSpriteBatchNode

3)         因为所有的CCSprite节点都添加到同一个CCSpriteBatchNode中,所以所有CCSprite节点都会使用相同的z-order来渲染。

16.     初始化注意精

1)         通常,在默认的初始化方法-(id)init中,不应该调用除了[super init]以外的方法。

17.     加载纹理贴图集

1)         如果你使用了512*512像素或者更大的纹理贴图集,你应该在游戏开始之前加载贴图,因为加载这么大的贴图是需要一些时间的(在最坏的情况下会导致游戏停滞好几秒)

 

原创粉丝点击