• Cocos2d-x之项目结构分析


    |   版权声明:本文为博主原创文章,未经博主允许不得转载。

    1.下面是我们创建cocos2d的工程MyGame01里的文件资源

     

    2. 在下面;文件解决方案下面有6个项目,我们的启动优先项为MyGame01;在MyGame01下有四个项resource,src,win32和外部依赖项;
        1)、在src中的代理程序;应用程序的代理,包含游戏初始化游戏,创建场景,图层,精灵,进入后台,前台等等的一些方法
        2)、在win32中的是main.cpp;为程序入口
        3)、外部依赖项是MyGame01项目依赖的外部项目;也就是MyGame01上面5个项目都可以添加依赖,来使用它们

    3.详细解读代码:
       1)、首先我们找到程序入口,查看main.cpp代码

    看到return  Application::getInstance()->run();程序这行代码;我们转到run()函数的定义,看run()函数如何执行的

    首先我们看到的是:

      一个初始化导演的代码,在是一个设置OpGLVIew视图的代码;有一个游戏无限循环的循环结构while(!glview->windowShouldClose())的循环体;!glview->windowShouldClose()表明:当程序运行的窗口没有关闭的时候将无限次循环循环体内的方法,在循环体内有两个方法:

    1 director ->mainLoop();                                                                           
    2 //导演类执行mainLoop()主循环
    3 glview->pollEvents();
    4 //这个是获取游戏在运行过程中的一些触发事件,如:点击鼠标,屏幕,摇动设备,重力感应,加速度感应等等

    run()中还有一个方法:release()是一个释放内存的函数

      在进入main.cpp之后;程序有main.cpp中的AppDelegate app;这句代码;程序就会序会执行代理程序AppDelegate;在AppDelegate.h中我们可以看到三个重要方法;AppDelegata  是控制应用程序生命周期的。

     

    1 virtual bool applicationDidFinishLaunching();               
    2 //这个方法将会在应用程序完成了加载之后执行
    3 比如:游戏图层的切换,应用程序启动完成之后,执行这个函数,来初始化界面的操作可以放在这个函数内
    4 virtual void applicationDidEnterBackground();               
    5 //应用程序进入后台之后,这个方法将会被调用
    6 比如:手机上按下home键,切换到手机主屏是,游戏调用此方法进入后台,电话来的时候,进入电话拨打界面,游戏自动暂停(包含了一些动画的停止,精灵等等游戏场景的停止),游戏进入到后台
    7 virtual void applicationWillEnterForeground();                
    8 //将应用程序从后台调入前台时,这个方法将会被执行
    9 比如:电话打完之后,再次进入游戏时,将调用此方法;将游戏从后台调入到前台运行

    三个方法在AppDelegate.cpp中有具体实现的方法,还可以自己在具体化。如下:
    1)、applicationWillEnterForeground();
    2)、applicationDidEnterBackground();

    在上面图中的有关声音引擎的部分可以选择注释掉,也可以不注释掉,这是当你手机随着进入后台或进入应用时,进行有关背景音乐的控制

    3)、applicationDidFinishLaunching()

     

    1)、首先获得OpenGLView视图
     auto director = Director::getInstance();
     auto glview = director->getOpenGLView();
    2)、设置帧频率FPS,是否显示(FPS每秒多少帧),就是运行HelloWorld窗口左下角的那个变换的东西,如果将ture改为false,左下角将不会显示任何的东西了
    // turn on display FPS
    director->setDisplayStats(true);   

     director->setDisplayStats(false);   

     

    3)、设置帧之间的刷新的间隔
    // set FPS. the default value is 1.0/60 if you don't call this
    director->setAnimationInterval(1.0 / 60);  
    如果帧率设置的是1/60,就是1/60秒调用一次mainLoop,mainLoop里面有drawScene
    4)、创建和运行场景
    // create a scene. it's an autorelease object
    auto scene = HelloWorld::createScene();
    // run
    director->runWithScene(scene);
      当程序运行到auto scene = HelloWorld::createScene();时;接下来程序将会运行到HelloWorldScene.h这个代理程序;打开HelloWorldScene.h我们可以知道,其实场景就是创建了一个图层并运行图层;他继承自Layer class HelloWorld : public cocos2d::Layer;HelloWorldScene这个是创建的一个图层,它public继承自图层Layer类

    在下图中的createScence方法中;它依次执行;创建场景创建图层

    当创建图层时,我们看到auto layer = HelloWorld::create();我们转到create()的定义处,下图;

      发现图层是通过CREATE_FUNC(HelloWorld);来创建的;采用了一个宏CREATE_FUNC(HelloWorld);这个其实就是类方法create的实现。查看CREATE_FUNC的定义;

    menuCloseCallback(cocos2d::Ref* pSender);一个回调方法,

    在宏CREATE_FUNC的定义中有一个pRet->init();,在这条语句执行的时候,将会跳转到init()方法,来创建图层;

      this是指当前指向自身的对象,因为HelloWorld继承自Layer类;因此此处的this指向的对象是Layer(图层),this->addChild();在HelloWorldScene中表示添加什么到图层中去, 顺序为: 创建create--->位置设置setPosition--->添加addChild


    项目的添加和引用;增添依赖关系
    解决方案右键单击,添加---> 添加现有项;

    然后会弹出一个窗口;cocos2d  --->external--->任何一个文件夹(这里以Box2D为例)--->proj.win32--->,选中.vcxproj的文件;在打开

    添加好了之后,在添加项目依赖项;解决方案右键单击,添加---> 属性;

     

     弹出一个属性设置窗口,如图操作:

  • 相关阅读:
    搭建kafka集群
    fluentd 安装、配置、使用介绍
    彻底解决 es 的 unassigned shards 症状
    nginx 反向代理时丢失端口的解决方案
    kubernetes的imagePullSecrets如何生成及使用
    创建MySQL数据库账号
    Linux中查找文件
    Linux快速访问多个目录
    Django查询数据库返回字典dict数据
    linux 将压缩包复制到另外一个文件夹下面
  • 原文地址:https://www.cnblogs.com/geore/p/5793746.html
Copyright © 2020-2023  润新知