您的位置:首页 > 移动开发 > Cocos引擎

好久没专心看一本技术书了,就从这本开始吧 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

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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: