Cocos2d-x 3.2入门之二:深入分析HelloWorld

一、创建项目

在前一节中已经搭建好了Cocos2d-x 3.2开发环境,现在就创建第一个项目:

cocos new HelloWorld -l cpp (-p com.ivae.hellocc -d .) 

二、项目分析

用VS打开项目,编译运行,运行成功!

  1.在win32文件夹下找到Windows平台的入口函数main.cpp中的winMain函数

int APIENTRY _tWinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPTSTR    lpCmdLine,
                   int       nCmdShow)
{
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(lpCmdLine);
    AppDelegate app;
    return Application::getInstance()->run();
}

 在WinMain函数中定义了一个AppDelegate对象,将先后调用其父类Application和AppDelegate的构造函数,在Application()函数中将程序实例的指针this,保存到静态成员变量sm_pSharedApplication中,以后可以通过调用其静态成员函数getInstance()来获得程序实例,这是单例模式的典型作法。

  2.紧接着程序回到main()中运行

return Application::getInstance()->run()

将调用Application::run(),主要代码如下:

if (!applicationDidFinishLaunching())
{
    return 0;
}

接着执行

bool AppDelegate::applicationDidFinishLaunching() {
    // initialize director
    auto director = Director::getInstance();
    auto glview = director->getOpenGLView();
    if(!glview) {
        glview = GLView::create("My Game");
        director->setOpenGLView(glview);
    }

    // turn on display FPS
    director->setDisplayStats(true);

    // set FPS. the default value is 1.0/60 if you don‘t call this
    director->setAnimationInterval(1.0 / 60);

    // create a scene. it‘s an autorelease object
    auto scene = HelloWorld::createScene();

    // run
    director->runWithScene(scene);

    return true;
}

在applicationDidFinishLaunching()中设置了一下基本参数,创建并运行了第一个场景。 
  

  3.来分析一下场景创建的代码

Scene* HelloWorld::createScene()
{
    // ‘scene‘ is an autorelease object
    auto scene = Scene::create();

    // ‘layer‘ is an autorelease object
    auto layer = HelloWorld::create();

    // add layer as a child to scene
    scene->addChild(layer);

    // return the scene
    return scene;
}

  在函数中创建了一个场景和一个HelloWorld层,在HelloWorld类中通过CREATE_FUNC(HelloWorld)宏,自动创建了一个create()函数,这样可以实现内存自动管理

#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;     } }

  在create()函数中调用init()函数,所以init()是HelloWorld实际的初始化函数。

  

三、总结

用一幅程序执行流程图,可以更好的理解程序的执行过程,希望本文能帮助你理清一点点思绪,我也是刚接触cocos2d-x,借着笔记整理下自己的所思所想,如有不正确的地方,还请指出。

  

  

 

时间: 2024-08-29 18:34:24

Cocos2d-x 3.2入门之二:深入分析HelloWorld的相关文章

Bootstrap入门(二)栅格

Bootstrap入门(二)栅格 全局CSS样式--栅格 先引入本地的CSS文件(根据自己的文件夹,有不同的引入地址,我是放在一个新建的名为css的文件夹中) container 容器,栅格系统是依赖容器存在的 ... Bootstrap 提供的栅格系统,随着屏幕或视口(viewport)尺寸的增加,系统会自动分为最多12列. 栅格系统用于通过一系列的行(row)与列(column)的组合来创建页面布局.参数: 超小屏幕 手机 (<768px) 小屏幕 平板 (≥768px) 中等屏幕 桌面显示

[WebGL入门]十二,模型数据和顶点属性

注:文章译自http://wgld.org/,原作者杉本雅広(doxas),文章中如果有我的额外说明,我会加上[lufy:],另外,鄙人webgl研究还不够深入,一些专业词语,如果翻译有误,欢迎大家指正. 顶点属性的意思 上次的文章中,介绍了一下从着色器的生成,编译,到程序对象的生成和着色器的连接.这次,简单的说一下模型数据的定义和顶点属性的处理.另外,介绍一下根据模型数据生成VBO的方法.VBO的使用要比生成难理解一些,但是不要担心,后面会慢慢说明.接下来看一下顶点属性.顶点属性,说的简单点,

Project Server 2013新手入门 (二)为PWA用户分配权限

上一篇文章我们讲到怎么为project server 2013 的PWA网站添加用户,那么用户添加好了,我们怎么给这些用户设置相应的权限,来对应我们项目管理中不同的角色(项目经理,资源经理.员工.负责人等),以便他们在项目整个过程中行使的权利和责任体现在我们的Project Server PWA的项目管理中心. 为用户分配PWA的全局权限(关于这个全局权限,我会在以后的文章中介绍) 执行完以上步骤之后,我们将在Project Server 2013 "服务器设置"下管理用户. 1)返回

HTML入门(二)

外部样式表当样式需要被应用到很多页面的时候,外部样式表将是理想的选择.使用外部样式表,你就可以通过更改一个文件来改变整个站点的外观. <head> <link rel="stylesheet" type="text/css" href="mystyle.css"> </head> 内部样式表当单个文件需要特别样式时,就可以使用内部样式表.你可以在 head 部分通过 <style> 标签定义内部样式

C语言快速入门教程(二)

C语言快速入门教程(二) C语言的基本语法 本节学习路线图: 引言: C语言,顾名思义就是一门语言,可以类比一下英语; 你要说出一个英语的句子需要:  单词  +  语法!  将单词按照一定的语法拼凑起来就成了一个英语句子了; C语言同样是这样,只不过单词可以理解为一些固定的知识点,而语法可以理解为算法(可以理解为解决问题的方法) 在这一节中我们就对固定知识点中的语言描述与数据存储进行解析! 1.C语言的基本元素 1.1  标识符 什么是标识符? 答:在C语言中,符号常量,变量,数组,函数等都需

Maven入门系列(二)--设置中央仓库的方法

原文地址:http://www.codeweblog.com/maven入门系列-二-设置中央仓库的方法/ Maven仓库放在我的文档里好吗?当然不好,重装一次电脑,意味着一切jar都要重新下载和发布. 下载的地址是中央仓库mvnrepository.com,当然,全球很多个仓库. 资源的坐标简称GVA 那么,现在如何修改maven的本地仓库路径呢? 关键在于maven文件夹的config下的settings.xml(E:\IDE\apache-maven-3.3.1\conf\settings

Java入门(二)——果然断更的都是要受惩罚的。。。

断更了一个多月,阅读量立马从100+跌落至10-,虽说不是很看重这个,毕竟只是当这个是自己的学习笔记,但有人看,有人评论,有人认同和批评的感觉还是很巴适的,尤其以前有过却又被剥夺的,惨兮兮的. 好好写吧. 现在开展的“业务”,一个是PHP,一个是Android开发. 前者偏向于三个方向,总结之前的(看书,敲代码实现),电商网站的开发,一些技能的实现: 后者起步阶段,一边Java学习,一边动手做东西出来,争取一周内有个交代吧先. 今天还比较坑一点,把昨天弄的卸载了,AS中的虚拟界面用不了,用哥们儿

DWR入门实例(二)

DWR(Direct Web Remoting) DWR is a Java library that enables Java on the server and JavaScript in a browser to interact and call each other as simply as possible. Dwr能让在服务器端的java代码和浏览器客户端的javascript代码尽可能简单的相互调用. DWR is Easy Ajax for Java!  官网:http://d

JSON入门之二:org.json的基本用法

廊坊的风一如既往的在窗外刮着,天地间肆意地飘洒,纵情在一刹那,为何现在只剩下风吹乱我的发,乱蓬蓬的,还是去超市逛逛吧,买吃的`(*∩_∩*)′,走进华联超市,热情的店员招呼着我,开始为我介绍,推荐各种各样商品,店员向我推荐了他们的会员卡,全场所有项目均八折,每逢节假日打五折,我心想那太划算了,而且他们总店,分店,加盟店都可以用,所以就办了张会员卡.今天我们的设计模式就从超市会员卡开始说起. 这个俨然就是我们设计模式中的组合模式----组合模式有时候又叫做部分-整体模式,它使我们树型结构的问题中,

DataVeryLite入门教程(二) Entity篇

DataVeryLite 是基于.net 4.0的数据库持久化ORM框架. 目前支持的数据库有Sqlserver,Mysql,Oracle,Db2,PostgreSql,Sqlite和Access. 最好先阅读DataVeryLite入门教程(一) 配置篇,然后再阅读本篇.如果你觉得麻烦也可以跳过. Entity是ORM中的核心对象之一,一个继承Entity的对象对应于数据库中的一个表. Entity提供丰富的API对表中的单条数据进行操作. 比如根据id或其他条件,加载,删除,插入,更新和部分