我们HelloWorld 从applicationDidFinishLaunching()后,

大部分人都会从这部分代码开始研究,如果想要研究main函数 如何调用applicationDidFinishLaunching()

传送门 http://blog.csdn.net/hiwoshixiaoyu/article/details/51472707


#include "AppDelegate.h"#include <vector>
#include <string>#include "HelloWorldScene.h"
#include "AppMacros.h"//Uncomment the following line to use localize manager
//#include "editor-support/cocostudio/LocalizationManager.h"//cocos2d的命名空间
USING_NS_CC;
//标准命名空间
using namespace std;
//构造函数
AppDelegate::AppDelegate() {}
//析构函数
AppDelegate::~AppDelegate()
{
}//初始化OpenGl的上下文属性
void AppDelegate::initGLContextAttrs()
{GLContextAttrs glContextAttrs = {8, 8, 8, 8, 24, 8};GLView::setGLContextAttrs(glContextAttrs);
}bool AppDelegate::applicationDidFinishLaunching() {// 获取导演实例auto director = Director::getInstance();//获取导演的GLView对象(通过一些函数,GLView可以操作的帧信息EGL视图)//GLView是一个抽象类//cocos2d-x提供GLViewImpl,继承它为默认渲染器上下文,你也可以有自己的GLViewImpl,通过继承重写auto glview = director->getOpenGLView();//判空if(!glview) {//创建窗口名glview = GLViewImpl::create("Cpp Empty Test");//设置opengl的视图director->setOpenGLView(glview);}director->setOpenGLView(glview);// 设置决定的分辨率glview->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, ResolutionPolicy::NO_BORDER);//获取EGL视图大小Size frameSize = glview->getFrameSize();//一个string容器vector<string> searchPath;//在这个例子里,我们选择资源根据画面的高度//如果资源不同于我们的分辨率大小,你需要设置一个contentScaleFactor//我们使用资源的高度比的高度设计解决//这样我们可以确保资源的高度 填充设计分辨率的高度//如果画面的高度比设备的小,选择大的资源if (frameSize.height > mediumResource.size.height){//高度大于设备高度//设置选择资源路径searchPath.push_back(largeResource.directory);//设置比例(高分辨率的设备可能有一个更高的表面比屏幕尺寸大小)director->setContentScaleFactor(MIN(largeResource.size.height/designResolutionSize.height, largeResource.size.width/designResolutionSize.width));}//如果画面高度大于设置资源高度,选择设置资源else if (frameSize.height > smallResource.size.height){searchPath.push_back(mediumResource.directory);director->setContentScaleFactor(MIN(mediumResource.size.height/designResolutionSize.height, mediumResource.size.width/designResolutionSize.width));}//如果画面高度小于设置资源高度,选择小的资源else{searchPath.push_back(smallResource.directory);director->setContentScaleFactor(MIN(smallResource.size.height/designResolutionSize.height, smallResource.size.width/designResolutionSize.width));}//设置搜索目录FileUtils::getInstance()->setSearchPaths(searchPath);//  如果你想要加载json,用下面的方法/*cocostudio::ILocalizationManager * lm = cocostudio::JsonLocalizationManager::getInstance();lm->initLanguageData("your localize file name.lang.json");cocostudio::LocalizationHelper::setCurrentManager(lm, false);*///如果你想要 载入二进制数据   .csb 用一下方法/*cocostudio::ILocalizationManager * lm = cocostudio::BinLocalizationManager::getInstance();lm->initLanguageData("your localize file name.lang.csb");cocostudio::LocalizationHelper::setCurrentManager(lm, true);*/// 显示 FPSdirector->setDisplayStats(true);// 设置 FPS.默认值是 1.0/60 director->setAnimationInterval(1.0 / 60);// 创建一个自动释放的场景对象,通过一个静态方法auto scene = HelloWorld::scene();// 运行场景director->runWithScene(scene);return true;
}//这个函数将被调用,当app是不活跃的。例如打来电话了,它就会被唤起
void AppDelegate::applicationDidEnterBackground() {Director::getInstance()->stopAnimation();// 如果使用 SimpleAudioEngine,必须在这pause// SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
}//当app再次活跃起来的时候,这个函数会被调用
void AppDelegate::applicationWillEnterForeground() {Director::getInstance()->startAnimation();// 如果使用SimpleAudioEngine, 你必须在这 resume // SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
}

AppDelegate.cpp中的代码主要实现了游戏启动后执行的操作,游戏启动后的操作:

1、初始化导演类

2、创建的窗口

3、设置openGL 视图

4、设置动画的帧数显示和帧率

5、调用场景

6、运行场景(游戏真正的开始)

#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__#include "cocos2d.h"class HelloWorld : public cocos2d::Layer
{
public://初始化层 virtual bool init() override;//创建场景  static cocos2d::Scene* scene();// 响应消息  void menuCloseCallback(Ref* sender);// //用于创建:场景、菜单、层等东西 ,宏函数CREATE_FUNC(HelloWorld);
};#endif // __HELLOWORLD_SCENE_H__
#include "HelloWorldScene.h"
#include "AppMacros.h"USING_NS_CC;Scene* HelloWorld::scene()
{//'scene'是一个自动释放的对象auto scene = Scene::create();// 'layer'是一个自动释放的对象HelloWorld *layer = HelloWorld::create();// 把 layer作为一个儿子加到 scene上scene->addChild(layer);// 返回 scenereturn scene;
}// 在 "init" 你需要初始化你想要的实例
bool HelloWorld::init()
{//// 1. 父类 首先初始化if ( !Layer::init() ){return false;}/************************************************************************//*  FrameSize就是屏幕的实际分辨率,这是不变的,比如我用的盖世三的手机分辨率为1280x720,这就是盖世三的FrameSize。注意这个FrameSize很容易理解成屏幕的长宽多少,其实不是,分辨率和实际的长宽没有必然联系。比如:盖世3的尺寸(长宽)为4.8寸,分辨率为1280x720盖世4的尺寸(长宽)为4.99寸,分辨率为1920x1080所以在设计游戏时,只考虑屏幕的分辨率即可,不用考虑屏幕的实际长宽。                                                                     *//************************************************************************//*WinSize就是设计分辨率,相当于游戏设计的逻辑大小,可以这样理解,上面的FrameSize就是画框,这里的WinSize就是画布。VisibleSize就是画布显示在画框中的部分,注意:它的大小是用WinSize来表示的。VisibleOrigin就是VisibleSize在画框中的左下角坐标点,注意也是用WinSize来表示的。
*/auto visibleSize = Director::getInstance()->getVisibleSize();auto origin = Director::getInstance()->getVisibleOrigin();// 添加一个关闭按钮icon,设置回调函数,这是一个自动释放的对象auto closeItem = MenuItemImage::create("CloseNormal.png","CloseSelected.png",CC_CALLBACK_1(HelloWorld::menuCloseCallback,this));closeItem->setPosition(origin + Vec2(visibleSize) - Vec2(closeItem->getContentSize() / 2));//常见一个菜单,它是一个自动释放的对象auto menu = Menu::create(closeItem, nullptr);menu->setPosition(Vec2::ZERO);this->addChild(menu, 1);//常见一个label标签,字体是arial.ttfauto label = Label::createWithTTF("Hello World", "fonts/arial.ttf", TITLE_FONT_SIZE);// label的位置设置到屏幕中心label->setPosition(origin.x + visibleSize.width/2,origin.y + visibleSize.height - label->getContentSize().height);//添加标签到这个层上this->addChild(label, 1);// 添加HelloWorld图片auto sprite = Sprite::create("HelloWorld.png");//精灵的位置在屏幕中心sprite->setPosition(Vec2(visibleSize / 2) + origin);// 把精灵作为儿子加到层上this->addChild(sprite);return true;
}//回调函数
void HelloWorld::menuCloseCallback(Ref* sender)
{//Director结束执行,释放资源Director::getInstance()->end();#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)//IOS的退出exit(0);
#endif
}

HelloWorldScene.cpp中的代码中的Scene* HelloWorld::scene(),实现了创建场景的过程:

1、创建场景

2、创建层

3、将层加到场景上

4、返回场景

HelloWorldScene.cpp中的代码中的Scene* HelloWorld::init(),实现了初始化实例:

1、初始化父类的Layer

2、得到窗口的大小(WinSiez)

3、得到窗口的坐标(左下角点)

4、创建关闭按钮(Normal、Push)和回调函数

5、设置关闭按钮的位置

6、创建菜单项

7、设置菜单项的位置

8、设置菜单的位置

9、将菜单加到层中

10、创建标签

11、设置标签的位置

12、将标签加到层上

13、创建精灵

14、设置精灵的位置

15、将精灵加到层上

转载于:https://www.cnblogs.com/hiwoshixiaoyu/p/10035086.html

Cocos2d-3.x版的HelloWorld工程分析 (二)相关推荐

  1. 03-instancing 工程分析详解

    opengl编程指南第8版源码怎么下载.编译,请参考<opengl编程指南第8版源码编译详细说明> 1. 程序启动 请参考<03-drawcommands工程分析详解> 2. ...

  2. Cocos2d x 2 0 从HelloWorld入手

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 从上一篇 ...

  3. 使用gn创建HelloWorld工程

    使用gn创建HelloWorld工程 1. 研究chromium自带的HelloWorld工程 我们在src根目录下找到[test]目录,此目录下存在2个文件 BUILD.gn hello_world ...

  4. ActiveMQ入门教程(三) - ActiveMQ P2P版的HelloWorld

    为什么80%的码农都做不了架构师?>>>    在这篇博客,我们来写一个ActiveMQ版的HelloWorld. 其实,要想写程序的话,还是要先了解一下JMS规范里的东西. 可以参 ...

  5. MATLAB数学计算与工程分析范例教程,MATLAB数学计算与工程分析范例教程

    基本信息 书名:MATLAB数学计算与工程分析范例教程 定价:28.00元 作者:石博强,赵金 编著 出版社:中国铁道出版社 出版日期:2005-05-01 ISBN:9787#113057596 字 ...

  6. android的helloworld工程目录学习

    android的helloworld工程目录学习 Android工程的主要目录有src.gen.Android X.X.bin.res等文件夹. 1.     Src文件夹 Src文件夹包含java源 ...

  7. 基于eclipse创建android的helloworld工程

    基于eclipse创建android的helloworld工程 之前用过Android studio感觉很慢,决定采用eclipse来学习Android开发.下面来看是怎么创建的. 选择File--- ...

  8. ML之FE:利用FE特征工程(分析两两数值型特征之间的相关性)对AllstateClaimsSeverity(Kaggle2016竞赛)数据集实现索赔成本值的回归预测

    ML之FE:利用FE特征工程(分析两两数值型特征之间的相关性)对AllstateClaimsSeverity(Kaggle2016竞赛)数据集实现索赔成本值的回归预测 目录 输出结果 设计思路 核心代 ...

  9. 机器学习cae_CAE工程分析技术年会记

    读书使人充实,讨论使人机智,笔记使人准确,读史使人明智,读诗使人灵秀,数学使人周密,科学使人深刻,伦理使人庄重,逻辑修辞使人善辩.凡有所学,皆成性格.---- (英国)培根 可能是会议热度不够,非常遗 ...

最新文章

  1. [iOS]C语言技术视频-10-指针变量
  2. 适合小白了解学习的DevOps实践
  3. 怎样恢复计算机管理员身份,电脑高手必备:2招教你找回Windows管理员权限?
  4. matlab 画非线性曲线,matlab 非线性曲线拟合, nlinfit  lsqcurvefit  lsqnonlin
  5. Json-getJSON
  6. php 数据访问框架,PHP Ice框架数据库访问层- Ice Framework(PHP Web开发框架)
  7. JDK源码分析(2)之 Array 相关
  8. 详解Java的IO流Part7:PrintStream打印流【完结】
  9. HOOK大神用c++制作绝地求生自瞄物品透视,源码仅供娱乐!
  10. Appium系列教程
  11. js中进行字符串替换的方法
  12. 蚂蚁金服褚霸:敲最牛的代码,骑最野的车
  13. 【1】EFR32配置433Mhz(可通信CC1101)——EFR32 项目例程打开和烧录
  14. 计算机pcu,pcu(veh与pcu有啥区别)
  15. Tajima's D的意义
  16. 2021刷百度统计关键词的灰产嫌疑人徐某被抓
  17. windows 下搭建git服务器,及问题处理。
  18. 《高级无线网络—4G技术》——第1章  基础 1.1 4G网络及复合无线环境
  19. 合工大路强java第四次作业第5题
  20. iOS UILable换行相关设置

热门文章

  1. 检测对抗样本_对抗T恤以逃避ML人检测器
  2. 办大额信用卡致胜一招
  3. _VARIANT_T 到 CSTRING 转换
  4. qt开发环境 - 丁林松教程,丑陋的计算器
  5. asp.net mvc项目实例_降龙-第13章:MVC开发准备
  6. 云溪怎么导入dxf_dwg怎么转换成dxf文件?超详细图文教程分享
  7. React-router总结
  8. SVN_06导入项目文档
  9. 2019.01.26 codeforces 1096G. Lucky Tickets(生成函数)
  10. hello.cpp 第一个C++程序(本博客没有特指都是以QT测试)