第一章 没什么好说的,就是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);
}