Cocos2d-x 学习笔记一 HelloWorld
最近刚刚开始学习cocos2d-x,本身自己就是小菜外加从未涉足过游戏引擎方面,而相关的C++版本学习教程并不多,自学起来很是费力啊!
首先是引擎相关的最基本概念,参见http://leeyin.iteye.com/blog/1166940。。
生成的项目Classes文件夹下即为主要实现代码,HelloWorldAppDelegate类用于处理应用程序中的全局事件和状态变化,HelloWorldScene为具体界面及程序中操作的实现。
所有发生在main函数和HelloWorldAppDelegate类之间的事情都是由VS自行处理的,不受程序员控制.
HelloWorld类继承自CCLayer类,主要有4个public方法:
- // Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone
- virtual bool init();
- // there's no 'id' in cpp, so we recommand to return the exactly class pointer
- static cocos2d::CCScene* scene();
- // a selector callback
- virtual void menuCloseCallback(CCObject* pSender);
- // implement the "static node()" method manually
- LAYER_NODE_FUNC(HelloWorld);
init()方法用于helloworld界面初始化,具体完成了背景图加载,label文字加载,关闭按钮加载.
- //C++中不能用super::init(),而必须老老实实地指定是执行父类CCLayer::init()方法
- CC_BREAK_IF(! CCLayer::init());
- CCMenuItemImage *pCloseItem = CCMenuItemImage::itemFromNormalImage(
- "CloseNormal.png",
- "CloseSelected.png",
- this,
- menu_selector(HelloWorld::menuCloseCallback))
上述代码实现了关闭按钮项对关闭按钮图片加载及回调函数的载入,需要说明的是1.CPP中this代替了objc的self关键字。2.每种回调函数都有唯一类型的函数指针与之匹配,这里就是menu_selector回调函数类型。
- // Create a menu with the "close" menu item, it's an auto release object.
- CCMenu* pMenu = CCMenu::menuWithItems(pCloseItem, NULL);
- pMenu->setPosition(CCPointZero);
- CC_BREAK_IF(! pMenu);
- // Add the menu to HelloWorld layer as a child layer.
- 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类中.
- CCScene *pScene = HelloWorld::scene();
- // run
- pDirector->runWithScene(pScene);
实例化初始场景并由总导演进行调用。
转载于:https://blog.51cto.com/mssyy2010/802857
Cocos2d-x 学习笔记一 HelloWorld相关推荐
- Spring MVC 学习笔记一 HelloWorld
Spring MVC 学习笔记一 HelloWorld Spring MVC 的使用可以按照以下步骤进行(使用Eclipse): 加入JAR包 在web.xml中配置DispatcherServlet ...
- MOOS学习笔记1——HelloWorld
MOOS学习笔记1--HelloWorld 例程 /* * @功能:通讯客户端的最简单程序,向MOOSDB发送名为"Greeting" * 数据"Hello", ...
- 【FastDDS学习笔记】HelloWorld示例程序编译和运行
目录 第一章:[FastDDS学习笔记]Ubuntu22上安装fastDDS环境 第二章:[FastDDS学习笔记]HelloWorld示例程序编译和运行 第三章:[FastDDS学习笔记]Fast- ...
- nodejs学习笔记-入门helloworld
2019独角兽企业重金招聘Python工程师标准>>> 什么是nodejs? Node.js是一个基于Chrome JavaScript运行时建立的平台, 用于方便地搭建响应速度快. ...
- python编译helloworld_python3学习笔记--001--python HelloWorld
python默认使用UTF-8编码 一个python3版本的HelloWorld代码如下: #!/usr/bin/env python print ('Hello World!') 如果此python ...
- Objective-C 学习笔记1 HelloWorld
1.打开xcode(4.2) 2.选择 Create a new Xcode project 3.选择 os x下的 application 4.选择右边的Command Line Tool 5.点[ ...
- Griffon学习笔记1 - HelloWorld
参考文章:[url]http://morry.iteye.com/blog/804768[/url] [img]http://dl.iteye.com/upload/attachment/348337 ...
- 不忘初心helloworld,IMX6入门学习笔记
本文按照时间学习的先后顺序,入门体验了知名半导体厂商NXP的著名处理器--IMX6. 无论你是否有基础,都能按照流程学会软件使用和交叉编译方法,老规矩:看不懂算我的. 了解开发板 官方资料链接: ht ...
- Spring学习笔记:第一个Spring Boot程序HelloWorld
Spring学习笔记:第一个Spring Boot程序HelloWorld 一.跟着 Spring 了解技术趋势 1.看看 Spring 5.x 的改变暗示了什么 2.Spring Boot 和 Sp ...
最新文章
- python列表的实现原理_Python列表对象实现原理
- 状态保持中的cookie
- C语言常见的错误类型
- GIT学习笔记二(本地项目发布到GIT)
- 终于解决了无运行无网上邻居的问题
- LeetCode(589)——N叉树的前序遍历(JavaScript)
- Swift - 05 - 数值型字面量
- pyspark--用法
- Solr(一) Solr 简介及搜索原理
- ChIP-Atlas:基于公共chip_seq数据进行分析挖掘
- 三星mega2 android os,三星G7508Q (Galaxy Mega 2 双4G)一键救砖教程,轻松刷回官方系统...
- Delphi 德尔菲法
- 【笔记】uniapp APP运行到夜神模拟器
- 【Pytorch官方教程】从零开始自己搭建RNN2 - 字母级RNN的生成任务
- nginx负载接口与宕机切换
- 【计算机网络】(一):计算机网络+互联网基本知识
- *oulapp的双向证书破解
- 如何利用CCleaner快速查找重复文件?
- Iphone手机企业邮箱收发如何设置(有图)
- 广数980tc3尾座锁定代码_广州数控GSK980TC3系列 PLC及安装连接手册.pdf
热门文章
- 关于Kanas.Net框架的一些背景
- JAVA SE学习day_11:集合的相关应用、增强型for循环、foreach方法、数组与集合的相互转换
- ubuntu创建vim php文件,在ubuntu 上配置vim的php开发环境
- php加mysql分页_php mysql 分页函数
- Xamarin Essentials教程打开文件
- 随机邻域嵌入_「论文阅读」-学习用于通勤流嵌入的地理上下文嵌入
- 数据窗口动态生成列_Excel黑科技:教你8个简单实用的图表生成技巧
- android仿qq聊天项目点评,android 实现qq聊天对话界面效果
- 新冠疫情使新科研项目减少36%,生物化学研究下降最多,女性科学家最受影响 | Nature子刊...
- 30分钟从工作电脑入侵公司内网!Win11:更新强制要求有TPM2.0,知道为啥了吧?...