Cocos2d-x 3.x学习记录




-------------------------------------------------------------2015-1-16--------------------------------------------------------

Cocos2d-x项目创建:
     路径:H:\AGame_Dev\Cocos2d-x\cocos2d-x-3.2\tools\cocos2d-console\bin
     命令:cocos new 项目名 -p 包名 
                                          -l 语言(cpp/lua/js) 
                                          -d 保存路径


ProgressTimer-进度条
     类:ProgressTimer
     TYPE:BAR/RADIAl     线性/时钟
     

           auto   proTimer  = CCProgressTimer :: create ( Sprite :: create ( "Test.jpg" ));
       proTimer  -> setType ( ProgressTimer :: Type :: BAR );
       proTimer  -> setPosition ( Vec2 ( visibleSize . width / 2 , visibleSize . height / 2 ));
       proTimer -> setPercentage ( 0.0f );
       proTimer -> setBarChangeRate ( Vec2 ( 1 ,  0 ));     //用来设置进度条动画方向的,(1,0)表示横方向,(0,1)表示纵方向。 
       proTimer -> setMidpoint ( Vec2 ( 0.5 ,  0.5 ));

       auto  proTo =  ProgressFromTo :: create ( 5 , 0 , 100 );
       proTimer -> runAction ( RepeatForever :: create ( proTo ));
       this -> addChild ( proTimer );

配合setPercentage或ProgressTo等方法改变进度
proTimer -> setMidpoint ( Vec2 ( 0.5 ,   0.5 ));    
是设置进度条的起始点,不同变化类型设置不同,在横向变化中只需要设置第一个参数表示x轴的变化位置
在radial类型中一般设置为(0.5,0.5)。


BAR:

RADIAL:



-------------------------------------------------------------2015-1-17--------------------------------------------------------


Action: 瞬时动作与延时动作

     一看基本就知道怎么用,注意四个动作——行拆分、列拆分、%序列

地图:
     TileMap


-------------------------------------------------------------2015-1-23--------------------------------------------------------
C++ 函数宏
      可以带参数的宏(替换),cocos2d-x中常见了create宏函数,C++中宏只能是一条语句,故用“\”换行符换行

#define  CREATE_FUNC  (__TYPE__) \
static  __TYPE__* create() \
{ \
    __TYPE__ *pRet =  new  __TYPE__(); \
     if  (pRet && pRet->init()) \
    { \
        pRet->autorelease(); \
         return  pRet; \
    } \
     else  \
    { \
         delete  pRet; \
        pRet =  NULL ; \
         return  NULL  ; \
    } \
}

-------------------------------------------------------------2015-1-24--------------------------------------------------------
 Sence(场景)
     场景本身没有意义,可以理解为一个空壳,向其中添加精灵、层、菜单后才有意义;3.0版本后可以创建物理场景即一个物理世界。
第一次显示场景:Director::getInstance()->runwithScene(Scene*)     
切换场景:             Director::getInstance()->replaceScene(Scene*)
切换特效:          Director::getInstance()->replaceScene(TransitonJumpZoom(float duriation,Scene* xxx::creatSence))
     特效:还有许多种,要用的时候再去选择
压栈:                 Director::getInstance()->pushSence()——暂停当前场景并保存于内存中,显示新场景
出栈:                 Director::getInstance()->popSence()——恢复栈顶场景,销毁当前场景

注:由于Sence占内存空间比较大,一般不用压栈、出栈,改用向当前层添加新Layer!


Lyaer(层):
     无法独立于场景而存在,一个场景可添加多个Layer而又不相互影响,比如:背景层与人物层,背景层移动人物层不动


Sprite(精灵):
     精灵仅用于图片的表现。在游戏开发中,英雄、敌人等对象(Class)一般包含Sprite成员用于图像显示,若该对象还有攻击力、血量等属性,也可用成员变量表示

Menu(菜单)
     类似于Sence本身无意义,用于包含MenuItemXXX,可点击;
     注意在结尾要传NULL参数
           auto  valStr =  Value  ( "我是Value字符串" );
            Label * label =  Label  ::create(valStr.asString().c_str(),  "Arial" , 30);            //       会乱码
            auto  menuItemLabel =  MenuItemLabel  ::create(label);
            auto  menu =  Menu  ::create(menuItemLabel, NULL );           //一定要写NULL

Value:
     是Cocos2d-x提供的数据类,可以存放所以基本数据类型,还有int、float、stiring之间了类型转换功能(x.asxXX)

Vector(队列):
     是Cocos2d-x提供的类,用于同一类型变量的顺序存放,但并不是数据结构里的队列
           Vector < Label  *> vec;
          vec.pushBack(  Label ::create( "labelNo.1"  ,  "Airal" , 30));
          vec.pushBack(  Label ::create( "labelNo.2"  ,  "Airal" , 30));
          vec.insert(0,  Label ::create( "labelNo.3"  ,  "Airal" , 30));  //插入任意位置
            Label * zero = vec.at(1); //取出后再取1就为NULL
          zero->setPosition(200, 200);
            this ->addChild(zero, 1);

            Label * front = vec.front(); //队列中第一个元素,取出后再取就为NULL
          front->setPosition(300, 300);
            this ->addChild(front,1);

-------------------------------------------------------------2015-1-25--------------------------------------------------------
音乐播放:  
          //背景音乐播放,只适用于播放时间较长的音乐
          CocosDenshion::  SimpleAudioEngine ::getInstance()->playBackgroundMusic( "D:\\KuGou\\爸爸去哪儿 - 么么哒.mp3"  , false );
            //效果音播放
          CocosDenshion::  SimpleAudioEngine ::getInstance()->playEffect( "D:\\KuGou\\music.mp3"  );
预加载是为了减少加载规模较大的文件时的等待时间,进行提前加载,proloadxXX();

-------------------------------------------------------------2015-1-26--------------------------------------------------------

CosoStudio2.x版本在Cosos2d-x3.3中的使用
【教程】CocosStudio2.x发布的资源在2d-x中的使用简介   

动作MoveTo/By、ScaleTo/By
MoveTo是直接移动到指定点,MoveBy是在当前的坐标上分别在X、Y方向上加上指定点的分量
ScaleTo是直接变为原始大小的多少倍,ScaleBy是在当前倍数下进行缩放(当前0.5倍,By4.0f后就是2倍)基数是原始大小

卡牌翻转效果
auto  scaleTo =  ScaleTo  ::create(3.0f, -1.0f, 1.0f);


贝塞尔曲线(BezierTo/By) p79


Spawn——让动作一起执行
Sequence——让动作按顺序执行     参数都要以NULL结尾


动作监听——lambde函数
     lambde属于C++,相当于匿名内部类
     格式:[&/=](){} ;
     [  ]——表示外部变量 无法在lambde函数内部使用
     [&]——表示将外部作用域中的变量采用 引用的方式在lambde函数体{}内部使用;
     [=]——表示将外部作用域中的变量采用 拷贝的方式在lambde函数体{}内部使用;
     [=,&xiaoRuo]——表示xiaoRuo变量采用引用的方式,其余拷贝;

监听实现——scaleTo结束时触发lambde
      auto  scaleBy =  ScaleBy ::create(3.0f, -1.0f, 1.0f);
      auto  lamFunc = [&](){
                    auto  lab =  Label  ::create( "Lambde函数!" ,  "宋体" , 30);
                   lab->setPosition(  Vec2 (500, 500));
                    this ->addChild(lab);
         };
         auto  callFun =  CallFunc  ::create(lamFunc);
         auto  sequence =  Sequence  ::create(scaleBy, callFun,  NULL );
        picture->runAction(sequence);



触摸事件监听:

-------------------------------------------------------------2015-2-2--------------------------------------------------------
大量精灵绘制
     auto-batching——自动批处理,可大幅减少绘制批次。条件:
     1、属于同一张图片(纹理、混合函数ID、shader都相同)
     2、在最终绘制队列中连续

控制绘制顺序的三个变量:
GlobalZOrder>localZOrder>orderOfArrival
GlobalZOrder与localZOrder数值越大越先被绘制,而orderOfArrival则相反;

动画的创建
     动画——多张连续图片的快速切换
     1、为每一张图片创建SpriteFrame对象
          1.1 SpriteFrame * pic =  SpriteFrame ::create(StringUtils::format( "girl%d.png"  ,i), Rect (0,0,100,100));
          1.2(推荐)
          SpriteFrameCache  * cache =  SpriteFrameCache ::getInstance();
          cache->addSpriteFramesWithFile(  "girls.plist" ,  "girls.png"  );
           SpriteFrame * pic2 = cache->getSpriteFrameByName( "xxx.png" );
     2、将每一个SpriteFrame加入队列中
           Vector < SpriteFrame  *> vec;
            vec.pushBack(pic2);
     3、创建Animation
           Animation *   animation =  Animation  ::createWithSpriteFrames(vec);
     4、创建Animate
           Animate * animate =  Animate  ::create(animation);
 Animate也是Action直接run;

-------------------------------------------------------------2015-2-3--------------------------------------------------------
问题:在TiledMap中一个图层的瓦片图片只能来自一个瓦片集(一张图片),否则只会显示后添加瓦片集的瓦片图形
解决方法:新创建一个图层,然后添加其它瓦片集的瓦片
--------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值