渲染驱动方式,事件驱动方式

this->addChild(pSprite, 0); 的第二个参数(int zOrder)表示要添加到this类对象中的顺序。是由里向外的方向。值越大表示越在外面。

CCNode:public CCObject

锚点就是改变作用点

坐标系转换函数:CCDirector::convertToGL(CCPoint);//z转换为OpenGL坐标系,顶点在左下

坐标系转换函数:CCDirector::convertToUI(CCPoint);//z转换为屏幕坐标系,顶点在左上

世界坐标系:在中点

本地坐标系:物体本身的坐标系

相对坐标,绝对坐标:

//逻辑值:getContentSize();  getPosition();

//真实值:getContentSizeInPixels();getPositionInPixels();

//缩放因子:CCDirector::setContentScaleFactor(1.0f);

CCDirector::enableRetinaDisplay(false);//contentScaleFactor=1.0

CCDirector::enableRetinaDisplay(true);//contentScaleFactor=2.0

内存操作:

CCObject 都会有一个引用计数对内存处理。

引用计数机制:sprite->retain();//加一

       sprite->release();//减一

         sprite->retainCount();//返回其引用次数

       this->add(CCNode *node); //会使node的引用计数加一

节点树:

virtual void addChild(CCNode * child);

virtual void removeChild(CCNode * child,bool cleanup);

退出的时候父节点会释放掉子节点中所有的元素。

自动释放池(CCPoolManager):  后台或者引擎经营一个管理池。

PobSprite->autorelease();

属性值和属性函数:get ,set

引擎有定义宏: 声明:CC_PROPERTY(varType,varname,funName);

       定义: CC_SYNTHESIZE(varType,varname,funName);//不可定义对象,set的时候不会对原来的值进行内存释放。  

CC_SYNTHESIZE_RETAIN(varType,varname,funName);//可定义对象,进行释放。保证内存不泄漏

安全释放机制:

~GameObject(){

if(sprite){     //sprite 是成员变量  

delete sprite;

sprite =NULL;

}

}

Cocos2d-x的UI系统:

字体:CCLableTTF,CCLableBMFont,CCLableAtlas

标签:

菜单:CCMenu

进度条:

计时器:schedule

  schedule( schedule_selector(Atlas3::step) );//:@selector(step:)];//不断的重复执行step指针所指向的函数

事件处理机制:

事件队列:

CCTouchDispatcher//需要处理事件的节点

CCTouchDelegate

CCTargetedTouchDelegate  单点触摸

CCStandardTouchDelegate  多点触摸

为精灵添加事件:

通知事件:
A发送通知,B修改状态

输入框:
CCTextFieldTTF
CCTMEDelegate 针对输入法的操作
CCTextFieldDelegate 操作TextField外观和动画的

cocos2d-x几何图形绘制: 关键函数draw()

程序进入到一个节点的时候,会执行节点的onEnter()函数

cocos2d-x 动作行为:
动作与动作执行函数:CCAction * runAction(CCAction *action);
动作类型:瞬时动作

CCActionInstant
CCPlace 让节点到一个位置
CCHide/CCShow 隐藏和显示
CCToggleVisiility 也是显示和隐藏,只是相对的修改当前的状态
CCFlipX/CCFlipY 翻转 对XY轴镜像
延时动作
CCActionInterval
CCMoveTo/CCMoveBy to->移动到,By->根据当前位置移动多少的距离
CCJumpto/CCJumpBy 跳跃
CCBezierTo/CCBezierBy 贝塞尔曲线
CCScaleTo/CCScaleBy 缩放
CCRotateTo/CCRotateBy 旋转
CCBlink 闪烁
CCTintTo/CCTintBy 色调变化
CCFadeTo 变暗到
CCFadeIn 淡出(慢慢显示)
CCFadeOut 渐隐(慢慢隐藏掉)

组合动作
CCSequence 序列
CCSpawn 同步
CCRepeat 重复有限次数
Reverse 反动作
CCRepeatForever 无限重复
CCAnimate 创建帧动画

速度变化
CCEaseIn 由慢变快(速度线性变化)
CCEaseOut 由快至慢
CCEaseInOut 由慢至快再由快至慢
CCEaseSineIn 由慢至快
CCEaseSineInOut 由慢至快再由快至慢
CCEaseExponentialIn 由慢至极快
CCEaseExponentialIn 由极快至慢
CCEaseExponentialInOut 由慢至极快再
CCSpeed 人工设定速度,通过setSpeed不断调整
扩展动作
延时:CCDelayTime
函数调用 //动画执行完调用一个函数接着执行下一个动画
CCCallFunc(无参数函数)
CCCallFuncN(当前对象CCNode)
ActionManager 动作管理器 管理所有的Action

画一个导图:展示所有动作类的类图。

缓存机制:
纹理缓存:
精灵帧缓存:
动画缓存:
TexturePacker图片拼合
1)CCSprite存储图片-》 CCTexture2D-》CCTextureCache(图片缓存)

spriteBatch 精灵表  提高效率

2)spriteBatch 存储图片组合-》 CCTextureAtlas-》CCTextureCache(纹理缓存)  (效率快,一次加载N多张图片到spritebatch中)

TexturePacker图片拼合  (视频36)

3)CCAnimation

     CCAnimationFrame()(动画帧)  ->CCSpriteFrame(精灵帧)->CCSpriteFrameCache(精灵帧缓存:缓存了大的拼合图片里的每个小的精灵帧)

     CCAnimationCache(动画缓存)

粒子系统:

如果才用帧动画:会导致资源包会增加,效果不会改变。由引擎计算下一帧的位置和岂止颜色

      粒子属性:

           发射器属性:  

      CCTexture2D* fire=CCTextureCache::sharedTextureCache()->addImage("fire.png");
      CCParticleSystem *fireParitcle=CCParticleFire::create();
       fireParitcle->setTexture(fire);
       this->addChild(fireParitcle);
       fireParitcle->setPosition(ccp(100,100));

场景切换:

    场景堆栈

      切换方式

      切换特效   :场景能执行的动作,图层也可以

      CCScene *helloWorld=HelloWorld::scene();

      CCScene * helloScreen=CCTransitionMoveInR::create(1.3f,helloWorld);

      CCDirector::sharedDirector()->replaceScene(helloScreen);

网格特效:

    网格特效原理

    网格特效使用方法:

     virtual CCGridBase *getGrid();

     virtual  void  setGrid(CCGridBase *pGrid);

     CCAction *CCNode::runAction(CCAction*action)

      

        CCActionInterval *shaky=CCShaky3D::create(2,false,ccg(15,10),1.2f);
         this->runAction(shaky);
                 schedule(schedule_selector(HelloWorld::checkAction));

    摄像机动画:CCActionInterval *orbit=CCOrbitCamera::create(....);

地图系统:  

    载入地图:       

CCTMXTiledMap *mapTild=CCTMXTiledMap::create("tmw_desert_spacing.tmx");
this->addChild(mapTild);
mapTild->setPosition(CCPointZero);

音频系统:音乐、音效

    音乐:背景音乐。

    音效:非常短的。刀砍声和发招是声  

SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic(CCFileUtils::sharedFileUtils()->fullPathFromRelativePath(MUSIC_FILE));
SimpleAudioEngine::sharedEngine()->preloadEffect(CCFileUtils::sharedFileUtils()->fullPathFromRelativePath(EFFECT_FILE));
SimpleAudioEngine::sharedEngine()->setBackgroundMusicVolume(1.0f);
SimpleAudioEngine::sharedEngine()->setEffectsVolume(1.0f); switch (nIdx)
{
case :
SimpleAudioEngine::sharedEngine()->playBackgroundMusic(std::string(CCFileUtils::sharedFileUtils()->fullPathFromRelativePath(MUSIC_FILE)).c_str(),true);
break;
case :
SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
break;
case :
SimpleAudioEngine::sharedEngine()->rewindBackgroundMusic();
break;
case :
m_nSoundId=SimpleAudioEngine::sharedEngine()->playEffect(std::string(CCFileUtils::sharedFileUtils()->fullPathFromRelativePath(EFFECT_FILE)).c_str(),true);
break;
case :
SimpleAudioEngine::sharedEngine()->pauseEffect(m_nSoundId);
break;
case :
SimpleAudioEngine::sharedEngine()->resumeEffect(m_nSoundId);
}

cocos2d-x 物理引擎:视频59

        Box2D:纯逻辑计算引擎,对象都是虚的。(C++面向对象方式)

          Box2D的原理:

世界:通常作为整个屏幕的大小,一个场景对应一个物理世界

             刚体:所有物体都可以称着刚体:静态物体,动态物体(有质量,收到各种力的影响),平台物体(保持同一种运动的物体)。

            形状:圆形,多边形

            夹具:(Fixture):人是通过夹具形成的: 圆形的头,矩形的身体,两个矩形的脚

            关节:(连接夹具之间的结点):

                  线关节的目的:将两个物体的相对运动限制在一个直线方向,允许物体的自身旋转运动。

                  棱镜关节:线性关节的升级版,不但固定了物体的运动方向,而且不允许物体有任何的旋转运动,关联物体必须始终保持初始状态的角度。            

                  旋转关节:

                  滑轮关节:

                  齿轮关节:

                  鼠标关节:可以支持用户的直接拖拽

            碰撞点:

            单位变换:

                b2Vec2   GetWorldPoint(const b2Vec2 &localPoint);

            其他遍历:

            常用操作:视频(61)

              点是否在形状内:  

                    b2Transfrom   transform;    

                    transform.SetIdentity();

                    b2Vec2.point(5.0f,2.0f);

                    bool  hit=shape->TestPoint(transform,point);

             光线是否和指定的形状交叉:

代码实现:

  成员变量: b2World *world;//物理世界

void HelloBox2D::initPhysics()  //系统初始化的时候调用该函数

{

   b2Vec2  gravity;//重力

  gravity.Set(0.0f,-10.0f);

 world=new  b2World(gravity);

world->SetAllowSleeping(true);//物体停止之后是否还会纳入物理世界,进行计算

world->SetContinuousPhysics(true);//物体停止之后是否还会纳入物理世界,进行计算

b2BodyDef  groundBodyDef;//定义一个刚体  

groundBodyDef.position.Set(,);   //给世界指定一个范围,盒子。

b2Body *groundBody=world->CreateBody(&groundBodyDef);//创建一个刚体(整个框架)

b2EdgeShape  groundBox;//定义一个形状

//指定物理空间范围:

//底部

groundBox.Set(b2Vec2(,),b2Vec2(/PTM_RATIO,)); // PTM_RATIO是个宏定义为32.0f  比例缩放

groundBox->CreateFixture(&groundBox,);创建夹具

//顶部

groundBox.Set(b2Vec2(,/PTM_RATIO),b2Vec2(/PTM_RATIO,/PTM_RATIO)); // PTM_RATIO是个宏定义为32.0f

groundBox->CreateFixture(&groundBox,);创建夹具

//左

groundBox.Set(b2Vec2(,/PTM_RATIO),b2Vec2(,)); // PTM_RATIO是个宏定义为32.0f

groundBox->CreateFixture(&groundBox,);创建夹具

//右

groundBox.Set(b2Vec2(/PTM_RATIO,/PTM_RATIO),b2Vec2(/PTM_RATIO,)); // PTM_RATIO是个宏定义为32.0f

groundBox->CreateFixture(&groundBox,);创建夹具

}

void HelloBox2D::addNewSpriteAtPosition(CCPoint p)

{

  b2BodyDef  bodyDef;

bodyDef.type=b2_dynamicBody//定义刚体类型

bodyDef.positon.Set(p.x/PTM_RATIO,p.y/PTM_RATIO);

b2Body *body=world->CreateBody(&bodyDef);

b2PolygonShape  dynamicBox;//定义一个多边形

dynamicBox.SetAsBox(0.5f,0.5f);//定义重心点

b2FixtureDef  fixtureDef;//定义夹具

fixtureDef.shape=&dynamicBox;//夹具形状

fixtureDef.density=1.0f;//夹具密度

fixtureDef.friction=0.3f;//摩擦系数  

body->CreateFixture(&fixtureDef);//为刚体定义夹具

CCNode*parent=this->getChildByTag(kTagParentNode)//根据tag到精灵表中找到对应的精灵

//m_pSpriteTexture  前面保存的纹理对象,  idx,idy 0或1的数    创建物理精灵   

//使用这个类需要引入头文件和命名空间 #include"cocos-ext.h"   using namespace  cocos2d::extension  

//项目中还要添加头文件的搜索路径    还要在链接中添加对应的lib

CCPhysicsSprite  *sprite=CCPhysicsSprite::createWithTexture(m_pSpriteTexture,CCRectMake(*idx,*idy,,));

parent->addChild(sprite);//将精灵添加到精灵表

sprite->setbody(body);

sprite->setPTMRatio(PTM_RATIO);//设定缩放因子

sprite->setPosition(ccp(p.x,p.y));

}

void update(float dt)//更新   需要开启调度器 (scheduleupdate())

{

     int velocityItereations=;//游戏循环次数

     int positionItereations=;

  world->Step(dt,velocityItereations,positionItereations);//更新

}

物理编辑器:OS版  vertexHelper

      Windows版   PhysicsEditor

使用物理编辑器:

GB2ShapeCache::sharedGB2ShapeCache()->addShapesWithFile("shapedefs.plist");

CCPhysicsSprite *sprite = CCPhysicsSprite::create((name+".png").c_str());
this->addChild(sprite);
sprite->setBody(body);
sprite->setPTMRatio(PTM_RATIO);
sprite->setPosition( ccp( p.x, p.y) );
sprite->setAnchorPoint(sc->anchorPointForShape(name.c_str()));

物理调试:

GLESDebugDraw* m_debugDraw;

m_debugDraw = new GLESDebugDraw( PTM_RATIO );
world->SetDebugDraw(m_debugDraw);

uint32 flags = 0;
flags += b2Draw::e_shapeBit;
flags += b2Draw::e_jointBit;
flags += b2Draw::e_aabbBit;
flags += b2Draw::e_pairBit;
flags += b2Draw::e_centerOfMassBit;
m_debugDraw->SetFlags(flags);

void HelloPhysicsEditor::draw()
{
//
// IMPORTANT:
// This is only for debug purposes
// It is recommend to disable it
//
CCLayer::draw();

#if CC_ENABLE_BOX2D_INTEGRATION
ccGLEnableVertexAttribs( kCCVertexAttribFlag_Position );//启用顶点

kmGLPushMatrix();//绘制之前保存矩阵的状态

world->DrawDebugData();

kmGLPopMatrix();//恢复到保存的状态
#endif
}

cocos2d-x 物理引擎:chipmunk  (c语言方式)  

cpInitChipmunk

cpSpaceStep

void  cpBodyUpdatePosition(cpBody *body,cpFloat  dt);

void  cpSpaceRehashStatic(cpSpace *space);  

空间cpSpace:

刚体cpBody:

形状cpShape:

约束cpConstraint:(对应Box2d关节)

    cpConstraint *constraint=cpPivotJointNew(staticBody.bodyA,staticBody->p);//创建约束

    cpSpaceAddConstraint(Space.constraint1);//添加约束

碰撞:

遍历:cpSpaceEachShape

cpSpaceEachBody

cpSpaceEachConstraint

内存管理:

    cpSpaceAlloc

    cpSpaceInit

    cpSpaceDestroy

    cpSpaceNew

    cpSpaceFree

cpBody *body = cpBodyNew(1.0f, cpMomentForPoly(1.0f, num, verts, cpvzero));

body->p = cpv(pos.x, pos.y);
cpSpaceAddBody(m_pSpace, body);

cpShape* shape = cpPolyShapeNew(body, num, verts, cpvzero);
shape->e = 0.5f; shape->u = 0.5f;
cpSpaceAddShape(m_pSpace, shape);

ccos2d-x 学习的更多相关文章

  1. 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代

    2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...

  2. Angular2学习笔记(1)

    Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...

  3. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  4. 消息队列——RabbitMQ学习笔记

    消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...

  5. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  6. Unity3d学习 制作地形

    这周学习了如何在unity中制作地形,就是在一个Terrain的对象上盖几座小山,在山底种几棵树,那就讲一下如何完成上述内容. 1.在新键得项目的游戏的Hierarchy目录中新键一个Terrain对 ...

  7. 《Django By Example》第四章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:祝大家新年快乐,这次带来<D ...

  8. 菜鸟Python学习笔记第一天:关于一些函数库的使用

    2017年1月3日 星期二 大一学习一门新的计算机语言真的很难,有时候连函数拼写出错查错都能查半天,没办法,谁让我英语太渣. 关于计算机语言的学习我想还是从C语言学习开始为好,Python有很多语言的 ...

  9. 多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类)

    前言:刚学习了一段机器学习,最近需要重构一个java项目,又赶过来看java.大多是线程代码,没办法,那时候总觉得多线程是个很难的部分很少用到,所以一直没下决定去啃,那些年留下的坑,总是得自己跳进去填 ...

  10. node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理

    一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...

随机推荐

  1. OJ题:奇偶归一猜想——求归一过程中的最大值

    题目: 题目内容: 奇偶归一猜想--对于每一个正整数,如果它是奇数,则对它乘3再加1,如果它是偶数,则对它除以2,如此循环,最终都能够得到1. 如n = 11,得序列:11, 34, 17, 52, ...

  2. Python代码运行助手

    将下述demo文件保存下来,比如存为learning.py 然后运行,如果出现: Ready for Python code on port 39093... 则说明成功了. demo #!/usr/ ...

  3. python 多窗口编辑

    同时打开多个文件: 1,vim filename1 filename2 在打开的多个文件中 :next 转到下个文件中 :prev 转到上个文件中 :last/:first 分别到最后一个和第一个文件 ...

  4. (NO.00001)iOS游戏SpeedBoy Lite成形记(十七)

    因为现在游戏内容原来越多了,里面需要存储的数据也多了起来,所以一个较好的办法是将所有的比赛数据存到同一个地方便于存取. 我们需要新建一个游戏数据类,该类贯穿所有需要的场景,存放一切比赛需要的数据.从这 ...

  5. Java进阶(八)Java加密技术之对称加密 非对称加密 不可逆加密算法

    对称加密 非对称加密 不可逆加密算法 根据密钥类型不同可以将现代密码技术分为两类:对称加密算法(私钥密码体系)和非对称加密算法(公钥密码体系). 1 对称加密算法 原理 对称加密算法中,数据加密和解密 ...

  6. 【一天一道LeetCode】#43. Multiply Strings

    一天一道LeetCode系列 (一)题目 Given two numbers represented as strings, return multiplication of the numbers ...

  7. platform_driver_probe与platform_driver_register的区别

    Platform Device and Drivers  从<linux/platform_device.h>我们可以了解Platform bus上面的驱动模型接口:platform_de ...

  8. mysql清空表

    清空某个mysql表中所有内容 delete from 表名; truncate table 表名; 不带where参数的delete语句可以删除mysql表中所有内容,使用truncate tabl ...

  9. 初涉IPC,了解AIDL的工作原理及使用方法

    初涉IPC,了解AIDL的工作原理及使用方法 今天来讲讲AIDL,这个神秘的AIDL,也是最近在学习的,看了某课大神的讲解写下的blog,希望结合自己的看法给各位同价通俗易懂的讲解 官方文档:http ...

  10. Linux常见压缩命令 - gzip,zcat,bzip2,bzcat

    几个常见的压缩文件扩展名 *.Z compress 程序压缩的文件: *.gz gzip 程序压缩的文件: *.bz2 bzip2 程序压缩的文件: *.tar tar 程序打包的数据,并没有压缩过: ...