CCCamera表示眼睛看的位置。
如果CCCamera在顶上,就相当于俯视,相机拿远,精灵就缩小
cocos2dx所有的节点都配了一个摄像机CCCamera
ccc4f(g,r,b,o)o为透明度
CCLayerColor//颜色
CCLayerGradient//渐变色图层
坐标系
屏幕坐标系为左上角为原点(触屏点击下的)
opengl坐标系为左下角为原点
物体本身坐标系,物体自身的坐标系
内存管理
引用计数
GameObject *pObject1 = new GameObject;
GameObject *pObject2 = pObject1;
delete pObject1;
pObject1->icount = 0;//出问题
retain();增加引用计数
release();减少计数,为0则删除
retianCount();返回当前引用计数多少
在CCobject中m_Rcfcrence//引用计数
重点:在要执行对象指针的赋值的时候要用retain();
每次自己的节点要释放的时候都会释放自己的节点里的子节点,addchild()
//宏
CC_SYNTHESIZE(int,_iCount,ICount);
CC_SYNTHESIZE_RETAIN(CCsprite...);
CC_SAFE_DELETE(Sprite);
在PlatformMarocs文件中
//UI系统
字体
标签
菜单
进度条
计时器
Cocos2dx缓存机制 //解决内存问题
1.cocos2dx纹理缓存
CCSprite->CCTexture2D->CCTextCache
CCTexture2D单例模式
CCTextureCache::shareTextureCache()->addImage();
加载过的图片不会再加载,通过字典树,判断里面的键值对是否存在
2.cocos2dx精灵帧的缓存
CCSpriteBatchNode精灵表
//第一种方式直接创建,这样fps会很低大概30多,但是用的图片还是同一张
for(int i = 0;i < 9000;i++)
{
CCSprite *sprite1 = CCSprite::create("helloworld.png");
//第二种,通过CCBatchNode,同一个渲染方式。大概60多,多一倍,但是只能在同一个层渲染
CCSpriteBatchNode *pbtach = CCSpriteBatchNode::create("helloworld.png");
addchild(pbatch);
for(int i = 0;i < 9000;i++)
{
CCSprite *sprite2 = CCSprite::createWithTexture(pbtach->getTexture());
//第三种:比较好的方法,使用plist文件(plist就是把多张图片拼接成一张图片,通过xml,只是把图片的信息加载进来)
CCSpriteFrameCache *spriteCache = CCSpriteCache::SharedSpriteCahce();
spriteCache->addSpriteFrameWithFile("sprite.plist"); //加载plist文件
CCSpriteBatchNode *pbtach = CCSpriteBatchNode::create("sprite.png");//加载精灵表
for(int i = 0;i < 9;i++)
{
char str[50] = {0};//初始化为0
sprintf(str,"gross%d.png",i+1); //都是用图片的路径,到时候通过plist文件查找到sprite.png里的信息
CCSprite *sprite2 = CCSprite::createWithSpriteFrameName(str); //这里的文件是从sprite.png加载的
sprite2->setPosition(ccp(CCRANDOM_0_1()*480,CCRANDOM_0_1()*320));
addChild(sprite2);
}
3.cocos2dx动画缓存
TexturePacker//图片拼接
如果CCCamera在顶上,就相当于俯视,相机拿远,精灵就缩小
cocos2dx所有的节点都配了一个摄像机CCCamera
ccc4f(g,r,b,o)o为透明度
CCLayerColor//颜色
CCLayerGradient//渐变色图层
坐标系
屏幕坐标系为左上角为原点(触屏点击下的)
opengl坐标系为左下角为原点
物体本身坐标系,物体自身的坐标系
内存管理
引用计数
GameObject *pObject1 = new GameObject;
GameObject *pObject2 = pObject1;
delete pObject1;
pObject1->icount = 0;//出问题
retain();增加引用计数
release();减少计数,为0则删除
retianCount();返回当前引用计数多少
在CCobject中m_Rcfcrence//引用计数
重点:在要执行对象指针的赋值的时候要用retain();
每次自己的节点要释放的时候都会释放自己的节点里的子节点,addchild()
//宏
CC_SYNTHESIZE(int,_iCount,ICount);
CC_SYNTHESIZE_RETAIN(CCsprite...);
CC_SAFE_DELETE(Sprite);
在PlatformMarocs文件中
//UI系统
字体
标签
菜单
进度条
计时器
Cocos2dx缓存机制 //解决内存问题
1.cocos2dx纹理缓存
CCSprite->CCTexture2D->CCTextCache
CCTexture2D单例模式
CCTextureCache::shareTextureCache()->addImage();
加载过的图片不会再加载,通过字典树,判断里面的键值对是否存在
2.cocos2dx精灵帧的缓存
CCSpriteBatchNode精灵表
//第一种方式直接创建,这样fps会很低大概30多,但是用的图片还是同一张
for(int i = 0;i < 9000;i++)
{
CCSprite *sprite1 = CCSprite::create("helloworld.png");
sprite1->setPosition(ccp(CCRANDOM_0_1()*480,CCRANDOM_0_1()*320));
addchild(sprite1);
}//第二种,通过CCBatchNode,同一个渲染方式。大概60多,多一倍,但是只能在同一个层渲染
CCSpriteBatchNode *pbtach = CCSpriteBatchNode::create("helloworld.png");
addchild(pbatch);
for(int i = 0;i < 9000;i++)
{
CCSprite *sprite2 = CCSprite::createWithTexture(pbtach->getTexture());
sprite2->setPosition(ccp(CCRANDOM_0_1()*480,CCRANDOM_0_1()*320));
addchild(sprite1);
}//第三种:比较好的方法,使用plist文件(plist就是把多张图片拼接成一张图片,通过xml,只是把图片的信息加载进来)
CCSpriteFrameCache *spriteCache = CCSpriteCache::SharedSpriteCahce();
spriteCache->addSpriteFrameWithFile("sprite.plist"); //加载plist文件
CCSpriteBatchNode *pbtach = CCSpriteBatchNode::create("sprite.png");//加载精灵表
for(int i = 0;i < 9;i++)
{
char str[50] = {0};//初始化为0
sprintf(str,"gross%d.png",i+1); //都是用图片的路径,到时候通过plist文件查找到sprite.png里的信息
CCSprite *sprite2 = CCSprite::createWithSpriteFrameName(str); //这里的文件是从sprite.png加载的
sprite2->setPosition(ccp(CCRANDOM_0_1()*480,CCRANDOM_0_1()*320));
addChild(sprite2);
}
3.cocos2dx动画缓存
TexturePacker//图片拼接