Cocos2dx初体验

搭建环境

  1. 官网下载cocos2dx最新版本。

  2. 按照官网的说明文档进行各个平台开发软件的下载。

  3. 下载python2.7版本,并在电脑中添加环境变量。

  4. 在下载的cocos2dx文件夹下运行python setup.py,如下

  1. 完成。

体验

创建一个HelloWorld工程

  1. 在cmd中输入cocos new HelloWorld -p com.helloworld -l cpp -d Delete

  1. HelloWorld是项目的名称,-p后面是项目的包名,-l后面是语言版本(cpp就代表的c++),-d后面是指创建项目存放的路径

  2. 在创建项目存放的路径文件夹下的proj.win32目录下打开HelloWorld.sln文件。

  3. 打开详情如下

  4. 编译运行。

    创建新场景并实现切换

    1. 创建一个第二个场景的SecondScence.h头文件,名称任意。
    2. 创建SecondScence.cpp文件。
    3. 注意创建的第二个场景的头文件和.cpp文件应放在Classes文件夹中,以实现头文件之间的调用。
    4. 在第一个场景(初始场景)中把关闭按钮实现的功能改为切换场景。

    5. 完成。

    场景切换特效

    1. 修改切换场景的代码,如下

    2. 旧的场景会向下退出,新的场景将会从上至下进入。

    3. 其他切换特效。

    4. 使用replaceScene函数进行场景切换会使旧场景被释放以节省内存资源。

    5. 完成。

    推进和弹出场景(马里奥)

    1. 两种无需释放旧场景的特效。

    2. 在第二个场景的.h头文件中声明一个popScene函数,在.cpp文件中添加按钮并定义函数popScene函数,此为按钮的回调函数。

    3. 上述以实现场景来回切换来说明不释放旧场景的功能。

    4. 完成。

    层和对象

    1. 一个场景有很多不同的层,比如一个层里放角色精灵,另一个层里放地图。

    2. 创建层的代码如下。

      Layer* layer=Layer::create();
      
    3. 创建一个aa的头文件和.cpp文件。

      //aa继承了Layer,其init函数是重写Layer,所以应先调用父类Layer的init函数做初始化,如果初始化失败就返回false不往下执行了
      bool aa::init()
      {
        if ( !Layer::init() )
          {
              return false;
          }
      //用一张图片创建一个对象
      	Sprite* sprite = Sprite::create("CloseNormal.png");
      //坐标
      	sprite->setPosition(Point(100, 200));
      //将精灵添加到层
      	this->addChild(sprite);
          return true;
      }
      
    4. 层与菜单的实现,同第三点,创建一个ceng.h和一个ceng.cpp,如下


    5. 完成。

    节点

    • Ref:Cocos2d-x引擎的基类。
    • Node:拥有简单功能的类,如缩放,设置坐标,大小,可见,拉伸等,有update函数以及有可以指定程序每一帧都调用一个函数。
    • Layer:继承于Node,拥有多种功能的类。
    • Cocos2d-x有一套内存管理的方式,想自动处理对象的释放就让类继承Rrf,并使用autorelease函数。

    Cocos2d-x 3.0新增-Value,Vector,Map

    1. Value拥有大量构造函数,所以使得它可以表示多种数值,如整数,浮点数,字符串,布尔类型等等,如下

      bool new::init()
      {
          if(!Layer::init())
          {
              return false;
          }
          Value a=Value("This is very good?1/0");
          Value b=Value(1);
          log("%s%d",a.asString().c_str(),b.asInt());
          //log是打印日志函数,用ac..函数获取信息,如asInt就是获取整型数值
          return true;
      }
      
    2. Vector的功能和队列相似,是对C++的vector容器类的封装,先进先出原则,如下

      bool new::init()
      {
          if(!Layer::init())
          {
              return false;
          }
          Lavel* one=Label::create("Firstman","Arial",20);
          one->setPosition(Point(200,300));
          Lavel* two=Label::create("Secondman","Arial",20);
          two->setPosition(Point(200,400));
          //创建Vector对象
          Vector<Label*> vec;  //<Label*>表示Vector设置为只能存放Label对象
          
          //将两个Label放入Vector中
          vec.pushBack(one);
          vec.pushBack(two);
          
          //遍历Vector取出所有Label添加入场景中
          for(auto lab:vec)
          {
              this->addChild(lab);
          }
         
          return true;
      }
      /*
      Vector常用函数:
      eraseObject(object) //从Vector中删除object对象
      pushBack(object) //从Vector的最好添加一个object对象
      erase(index) //从Vector中删除下标再index处的对象
      at(index) //返回Vector某个对象,index为下标值
      front() //返回Vector的第一个对象,也就是最先进Vector的对象
      size() //返回Vector存放的对象的个数
      back() //返回Vector的最后一个对象
      clear() //清空Vector
      */
      
    3. Map的功能是区分和存取大量信息,如下

      bool new::init()
      {
          if(!Layer::init())
          {
              return false;
          }
       //创建Map对象
          Map<int,Label*> newmap; //定义此Map用int作为key,用Label*作为value值
       //创建50个对象(英雄),并存储到Map中
          for(int a=1;a<=50;a++)
          {
        //英雄名称
          std::string name="No."+Value(a).asString(); //Value(a).asString()是Value的用法,可以在整数,浮点数和字符串之间转换,如Value("123").asInt()输出值是123
        //创建Label对象,代表英雄
          Label* yx=Label::create(name.c_str(),"Arial",20);
         
        //保持英雄到Map中,以a为key,以yx为value
          newmap.insert(a,yx);
          }
        //今天展示No.33号英雄
          Label* label=newmap.at(33);
          label->setPosition(Point(200,300));
          this->addChild(label);
         
          return true;
      }
      

      End

      基础已有了解,整理勿忘。

      ~


发布了34 篇原创文章 · 获赞 0 · 访问量 496

猜你喜欢

转载自blog.csdn.net/weixin_44228006/article/details/104095743