好久没专心看一本技术书了,就从这本开始吧 Learning Cocos2D.pdf
2012-12-03 18:44
169 查看
第一章 没什么好说的,就是cocos2d的下载安装,配置,和hello
第二章 笔记
UIKit 和 OpenGL ES 坐标系的区别:
UIKit 的坐标原点(0,0)在屏幕的左上角,OpenGL ES的原点在屏幕的左下角
所以在处理touch事件的时候,需要把UIKit坐标转化成OpenGL ES的坐标
cocos2d 的 covertToGL convertToUI 方法可以转化坐标
判断当前设备是不是ipad
使用CCLOG宏在debug版本输出调试信息,在发布版本就什么都不做
这里介绍了一个开源的游戏摇杆类,叫SneakyInput
不过在重复例子的时候,发现编译错误
Error logs:
Use of undeclared identifier 'GL_COLOR_ARRAY'
Use of undeclared identifier 'GL_TEXTURE_COORD_ARRAY'
产生错误的原因是我用的cocos2d 2.0使用的是OpenGL ES 2.0
在2.0报错的那几句代码可以注释了
然后在报错的那个函数填上这句代码
ccGLEnableVertexAttribs( kCCVertexAttribFlag_Position | kCCVertexAttribFlag_Color );
PNG是ios设备中支持最好的压缩格式了
这些图片被读进设备的时候都会解压
PVRTC压缩格式可以直接被GPU处理
使用CCSpriteBatch绘制同一张纹理图片的Sprite可以优化性能,减少open gl的绘制函数调用次数
OpenGL ES 的纹理大小都是2的次幂 比如说一个129*129像素大小的图片,在内存里也是按256*256大小存储的,所以把多个图合成一张图读取会节省很多内存
第三章
CCAnimationCache可以缓存动画
CCSprite 的boundingBox可以返回对象的包围盒 用CGRectIntersectsRect可以碰撞检测
第六章
fnt字体文件生成工具 Glyph Designer,Hiero Font Builder Tool
第七章
打开URL网址
第八章
ios设备在音频保持相同频率的时候性能最好,设置频率的函数为
设置音乐自动关闭和启动:
第十章 物理引擎
Box2D 处理的单位为米,千克,秒,当物品的长度在0.1米到10米之间,效果最好,所以选取一个适合的比例参数来转换point和meter,来使游戏里的物体长度在0.1米到10之间
通常,iPhone的屏幕宽 480 一般的物体都在32那么大,所以一般都选取32做参数,不过这不是绝对的,要更加具体情况而定。
初始化Debug设置:
这里需要注意的是,debugDraw处理的是像素,而cocos2d是用的point,所以需要乘上一个比例系数 contentScaleFactor
box2d的更新函数:
step的第一个参数最好选一个固定的时间间隔,这样处理的效率和真实性会更好,不然可能会出现错误
当设置layer支持重力感应的时候
当有重力数据的时候,
accelerometer:didAccelerate方法就会被调用
第二章 笔记
UIKit 和 OpenGL ES 坐标系的区别:
UIKit 的坐标原点(0,0)在屏幕的左上角,OpenGL ES的原点在屏幕的左下角
所以在处理touch事件的时候,需要把UIKit坐标转化成OpenGL ES的坐标
cocos2d 的 covertToGL convertToUI 方法可以转化坐标
判断当前设备是不是ipad
UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad
使用CCLOG宏在debug版本输出调试信息,在发布版本就什么都不做
这里介绍了一个开源的游戏摇杆类,叫SneakyInput
不过在重复例子的时候,发现编译错误
Error logs:
Use of undeclared identifier 'GL_COLOR_ARRAY'
Use of undeclared identifier 'GL_TEXTURE_COORD_ARRAY'
产生错误的原因是我用的cocos2d 2.0使用的是OpenGL ES 2.0
在2.0报错的那几句代码可以注释了
//glDisableClientState(GL_TEXTURE_COORD_ARRAY); //glDisableClientState(GL_COLOR_ARRAY); //glDisable(GL_TEXTURE_2D); //glVertexPointer(2, GL_FLOAT, 0, circleVertices_); //glColor4f(color_.r/255.0f, color_.g/255.0f, color_.b/255.0f, opacity_/255.0f);
// restore default GL state //glEnableClientState(GL_TEXTURE_COORD_ARRAY); //glEnableClientState(GL_COLOR_ARRAY); //glEnable(GL_TEXTURE_2D);
然后在报错的那个函数填上这句代码
ccGLEnableVertexAttribs( kCCVertexAttribFlag_Position | kCCVertexAttribFlag_Color );
PNG是ios设备中支持最好的压缩格式了
这些图片被读进设备的时候都会解压
PVRTC压缩格式可以直接被GPU处理
使用CCSpriteBatch绘制同一张纹理图片的Sprite可以优化性能,减少open gl的绘制函数调用次数
OpenGL ES 的纹理大小都是2的次幂 比如说一个129*129像素大小的图片,在内存里也是按256*256大小存储的,所以把多个图合成一张图读取会节省很多内存
第三章
CCAnimationCache可以缓存动画
CCSprite 的boundingBox可以返回对象的包围盒 用CGRectIntersectsRect可以碰撞检测
第六章
fnt字体文件生成工具 Glyph Designer,Hiero Font Builder Tool
第七章
打开URL网址
NSURL *urlToOpen = [NSURL URLWithString:@"http://www.baidu.com"]; [[UIApplication sharedApplication] openURL:urlToOpen];
第八章
ios设备在音频保持相同频率的时候性能最好,设置频率的函数为
[CDSoundEngine setMixerSampleRate:CD_SAMPLE_RATE_MID];
设置音乐自动关闭和启动:
[[CDAudioManager sharedManager] setResignBehavior:kAMRBStopPlay autoHandle:YES];
第十章 物理引擎
Box2D 处理的单位为米,千克,秒,当物品的长度在0.1米到10米之间,效果最好,所以选取一个适合的比例参数来转换point和meter,来使游戏里的物体长度在0.1米到10之间
#define PTM_RATIO 100.0 // When converting from Cocos2D coord to Box2D coord: float x_box2D = x_cocos2D / PTM_RATIO; float y_box2D = y_cocos2D / PTM_RATIO; // When converting from Box2D coord to Cocos2D coord: float x_cocos2D = x_box2D * PTM_RATIO; float y_cocos2D = y_box2D * PTM_RATIO;
通常,iPhone的屏幕宽 480 一般的物体都在32那么大,所以一般都选取32做参数,不过这不是绝对的,要更加具体情况而定。
初始化Debug设置:
- (void)setupDebugDraw { debugDraw = new GLESDebugDraw(PTM_RATIO *[[CCDirector sharedDirector] contentScaleFactor]); world->SetDebugDraw(debugDraw); debugDraw->SetFlags(b2DebugDraw::e_shapeBit); }
这里需要注意的是,debugDraw处理的是像素,而cocos2d是用的point,所以需要乘上一个比例系数 contentScaleFactor
box2d的更新函数:
-(void)update:(ccTime)dt { int32 velocityIterations = 3; int32 positionIterations = 2; world->Step(dt, velocityIterations, positionIterations); }
step的第一个参数最好选一个固定的时间间隔,这样处理的效率和真实性会更好,不然可能会出现错误
当设置layer支持重力感应的时候
self.isAccelerometerEnabled = TRUE;
当有重力数据的时候,
accelerometer:didAccelerate方法就会被调用
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration { b2Vec2 gravity(-acceleration.y * 15, acceleration.x *15); world->SetGravity(gravity); }
相关文章推荐
- 开始攻克下一本电子书PDF--Dive Into Python by Mark Pilgrim
- 好久没有写BLOG了,人老了就开始变懒了【非技术】
- 好久没有写BLOG了,人老了就开始变懒了【非技术】
- 如何开始写一本属于自己的技术书
- 新任技术管理者应该怎样去开始帮助他人?
- 今天开始慢下脚步,开始ios技术知识的查漏补缺。
- 初学jQuery,你应该从哪一本书开始?
- 我现在终于开始真正意义上的学IT技术了——达内培训记
- 广州技术沙龙第 4 期报名开始!
- 天天写业务代码的程序员,怎么成为技术大牛,开始写技术代码?
- 想要学习Linux技术,先好好的读一本Linux书籍吧
- 技术之路(一)-----技术生涯渐渐开始
- 占个位置,以后开始在这写技术博客了
- 就当现在开始学技术吧---------javase1
- 深度探索区块链:Hyperledger技术与应用 PDF 下载
- 今天开始写技术博客
- 整合PDF和Java技术 选择自 chensheng913 的 Blog
- 我决定开始写技术博客了
- 福利|热门技术看什么?这份书单告诉你!(内含PDF链接)
- 如何利用虚拟化技术解决物联网开发难题?从了解 ACRN 开始