最近刚刚开始学习cocos2d-x,本身自己就是小菜外加从未涉足过游戏引擎方面,而相关的C++版本学习教程并不多,自学起来很是费力啊!

首先是引擎相关的最基本概念,参见http://leeyin.iteye.com/blog/1166940。。

生成的项目Classes文件夹下即为主要实现代码,HelloWorldAppDelegate类用于处理应用程序中的全局事件和状态变化,HelloWorldScene为具体界面及程序中操作的实现。

所有发生在main函数和HelloWorldAppDelegate类之间的事情都是由VS自行处理的,不受程序员控制.

HelloWorld类继承自CCLayer类,主要有4个public方法:

  1. // Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone
  2. virtual bool init();
  3. // there's no 'id' in cpp, so we recommand to return the exactly class pointer
  4. static cocos2d::CCScene* scene();
  5. // a selector callback
  6. virtual void menuCloseCallback(CCObject* pSender);
  7. // implement the "static node()" method manually
  8. LAYER_NODE_FUNC(HelloWorld);

init()方法用于helloworld界面初始化,具体完成了背景图加载,label文字加载,关闭按钮加载.

  1. //C++中不能用super::init(),而必须老老实实地指定是执行父类CCLayer::init()方法
  2. CC_BREAK_IF(! CCLayer::init());
  1. CCMenuItemImage *pCloseItem = CCMenuItemImage::itemFromNormalImage(
  2. "CloseNormal.png",
  3. "CloseSelected.png",
  4. this,
  5. menu_selector(HelloWorld::menuCloseCallback))

上述代码实现了关闭按钮项对关闭按钮图片加载及回调函数的载入,需要说明的是1.CPP中this代替了objc的self关键字。2.每种回调函数都有唯一类型的函数指针与之匹配,这里就是menu_selector回调函数类型。

  1. // Create a menu with the "close" menu item, it's an auto release object.
  2. CCMenu* pMenu = CCMenu::menuWithItems(pCloseItem, NULL);
  3. pMenu->setPosition(CCPointZero);
  4. CC_BREAK_IF(! pMenu);
  5. // Add the menu to HelloWorld layer as a child layer.
  6. this->addChild(pMenu, 1);

上述代码创建了CCMenu实例,需要说明的是menuWithItems的最后一个参数必须为NULL。创建完成后要将实例用addChild加载到层里,实现整体化,而addChild第二个参数就是层数的标号,一个场景往往是多个层的叠加,所以序号成为决定了显示的效果的因素之一。

之后的创建label及载入图片过程与此相似,不再赘述。

virtual void menuCloseCallback(CCObject* pSender)方法只有一句话

CCDirector::sharedDirector()->end();

在用户点击按钮时调用了静态的总导演的end方法来实现退出程序。

LAYER_NODE_FUNC(HelloWorld)方法即为HelloWorld的node方法,HelloWorld类继承与CCNode类,继承的node方法在调用基类方法后便会调用init()方法来实现初始化。

最后是static cocos2d::CCScene* scene(),这个方法是为了实现场景类的实例,场景类作为层(CCLayer)的容器。在这个项目的结构组织上是将构建场景(class HelloWorldScene)的方法归属于派生的层类(class HelloWorld)之中,

方法中首先构造场景,然后构造层及初始化函数init(),完成初始化后将层加入到场景中并返回场景实例。

程序的整个流程大概是从applicationDidFinishLaunching中的CCScene *pScene = HelloWorld::scene()开始,然后static cocos2d::CCScene* scene(); 在其中会调用LAYER_NODE_FUNC(HelloWorld),node方法

会调用virtual bool init();,而virtual void menuCloseCallback(CCObject* pSender);被init

调用,最后初始化完成,回到appdelegate,由导演调用ranWithScene进行显示第一个场景。

appdelegate.cpp中应用程序收到的第一个消息会是applicationDidFinishLaunching方法,这是所有代码的起始位置,在APPDelegate类中.

  1. CCScene *pScene = HelloWorld::scene();
  2. // run
  3. pDirector->runWithScene(pScene);

实例化初始场景并由总导演进行调用。

转载于:https://blog.51cto.com/mssyy2010/802857

Cocos2d-x 学习笔记一 HelloWorld相关推荐

  1. Spring MVC 学习笔记一 HelloWorld

    Spring MVC 学习笔记一 HelloWorld Spring MVC 的使用可以按照以下步骤进行(使用Eclipse): 加入JAR包 在web.xml中配置DispatcherServlet ...

  2. MOOS学习笔记1——HelloWorld

    MOOS学习笔记1--HelloWorld 例程 /* * @功能:通讯客户端的最简单程序,向MOOSDB发送名为"Greeting" * 数据"Hello", ...

  3. 【FastDDS学习笔记】HelloWorld示例程序编译和运行

    目录 第一章:[FastDDS学习笔记]Ubuntu22上安装fastDDS环境 第二章:[FastDDS学习笔记]HelloWorld示例程序编译和运行 第三章:[FastDDS学习笔记]Fast- ...

  4. nodejs学习笔记-入门helloworld

    2019独角兽企业重金招聘Python工程师标准>>> 什么是nodejs? Node.js是一个基于Chrome JavaScript运行时建立的平台, 用于方便地搭建响应速度快. ...

  5. python编译helloworld_python3学习笔记--001--python HelloWorld

    python默认使用UTF-8编码 一个python3版本的HelloWorld代码如下: #!/usr/bin/env python print ('Hello World!') 如果此python ...

  6. Objective-C 学习笔记1 HelloWorld

    1.打开xcode(4.2) 2.选择 Create a new Xcode project 3.选择 os x下的 application 4.选择右边的Command Line Tool 5.点[ ...

  7. Griffon学习笔记1 - HelloWorld

    参考文章:[url]http://morry.iteye.com/blog/804768[/url] [img]http://dl.iteye.com/upload/attachment/348337 ...

  8. 不忘初心helloworld,IMX6入门学习笔记

    本文按照时间学习的先后顺序,入门体验了知名半导体厂商NXP的著名处理器--IMX6. 无论你是否有基础,都能按照流程学会软件使用和交叉编译方法,老规矩:看不懂算我的. 了解开发板 官方资料链接: ht ...

  9. Spring学习笔记:第一个Spring Boot程序HelloWorld

    Spring学习笔记:第一个Spring Boot程序HelloWorld 一.跟着 Spring 了解技术趋势 1.看看 Spring 5.x 的改变暗示了什么 2.Spring Boot 和 Sp ...

最新文章

  1. python列表的实现原理_Python列表对象实现原理
  2. 状态保持中的cookie
  3. C语言常见的错误类型
  4. GIT学习笔记二(本地项目发布到GIT)
  5. 终于解决了无运行无网上邻居的问题
  6. LeetCode(589)——N叉树的前序遍历(JavaScript)
  7. Swift - 05 - 数值型字面量
  8. pyspark--用法
  9. Solr(一) Solr 简介及搜索原理
  10. ChIP-Atlas:基于公共chip_seq数据进行分析挖掘
  11. 三星mega2 android os,三星G7508Q (Galaxy Mega 2 双4G)一键救砖教程,轻松刷回官方系统...
  12. Delphi 德尔菲法
  13. 【笔记】uniapp APP运行到夜神模拟器
  14. 【Pytorch官方教程】从零开始自己搭建RNN2 - 字母级RNN的生成任务
  15. nginx负载接口与宕机切换
  16. 【计算机网络】(一):计算机网络+互联网基本知识
  17. *oulapp的双向证书破解
  18. 如何利用CCleaner快速查找重复文件?
  19. Iphone手机企业邮箱收发如何设置(有图)
  20. 广数980tc3尾座锁定代码_广州数控GSK980TC3系列 PLC及安装连接手册.pdf

热门文章

  1. 关于Kanas.Net框架的一些背景
  2. JAVA SE学习day_11:集合的相关应用、增强型for循环、foreach方法、数组与集合的相互转换
  3. ubuntu创建vim php文件,在ubuntu 上配置vim的php开发环境
  4. php加mysql分页_php mysql 分页函数
  5. Xamarin Essentials教程打开文件
  6. 随机邻域嵌入_「论文阅读」-学习用于通勤流嵌入的地理上下文嵌入
  7. 数据窗口动态生成列_Excel黑科技:教你8个简单实用的图表生成技巧
  8. android仿qq聊天项目点评,android 实现qq聊天对话界面效果
  9. 新冠疫情使新科研项目减少36%,生物化学研究下降最多,女性科学家最受影响 | Nature子刊...
  10. 30分钟从工作电脑入侵公司内网!Win11:更新强制要求有TPM2.0,知道为啥了吧?...