我们不管是对于一款编程语言的学习,还是对一个游戏引擎的学习,第一个基本都是HelloWorld,那么我们现在来分析一下,Cocos3.0正式版的HelloWord  又有哪些改进?

我们可以对比2.2版本的Cocos,现在3.0的HelloWord已经改名为cpp-empty-test。这次我们来分析一下这个cpp-empty-test

运行程序,我们可以看到熟悉的HelloWorld程序:

和之前cocos2d-x2.x版本的HelloWorld看起来没太大差别,主要改变有三点:

标题文字显示为Cpp Empty Test。

按钮由下面改到了上面。

左下角的信息显示有所不同,以前显示的是批次  每帧的平均运行秒数FPS数,现在改成了 OPENGL的顶点数量   OPENGL的批次   FPS数/每帧的平均运行秒数。

说了一堆蛋疼的废话  现在来具体看下工程代码:

我们可以看到Visual Studio工程下目录有两个

分别是:

  Classes:程序中的类。{AppDelegate.h   AppDelegate.cpp:Cocos2d-x程序框架AppMacros.h    主要是设置分辩率及对应的资源目录                HelloWorldScene.h  HelloWroldScene.cpp   场景显示层}
win32:WIN32程序的主函数{main.cpp   winMain主函数
}

在WinMain函数中,只有一个实例化程序并运行它的过程:

int APIENTRY _tWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR    lpCmdLine,int       nCmdShow){UNREFERENCED_PARAMETER(hPrevInstance);UNREFERENCED_PARAMETER(lpCmdLine);// 创建一个程序对象。AppDelegate app;// Run起来。return Application::getInstance()->run();}

一切,都被封装到程序类AppDelegate中。这是一个基于Cocos2d-x的cocos2d::Application

类的派生类。它将程序框架封装为一个类,提供了统一的多平台上基本程序框架的实现。

AppDelegate.cpp:

#include "AppDelegate.h"#include <vector>
#include <string>#include "HelloWorldScene.h"
#include "AppMacros.h"USING_NS_CC;
using namespace std;AppDelegate::AppDelegate() {}AppDelegate::~AppDelegate()
{
}//初始化函数
bool AppDelegate::applicationDidFinishLaunching() {// 取设备auto director = Director::getInstance();// 取OpenGLauto glview = director->getOpenGLView();if(!glview) {//如果为空,创建 Cpp Empty Test的窗口。glview = GLView::create("Cpp Empty Test");   //设置设备使用的窗口,这一句可以去掉。director->setOpenGLView(glview);}//设置设备使用的窗口。director->setOpenGLView(glview);// 是WP8平台,设置分辩率
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WP8)// 在WP8上跑DX11,使用ResolutionPolicy::NO_BORDER模式设置分辩率会有一个BUG,这里改为ResolutionPolicy::SHOW_ALL模式。  glview->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, ResolutionPolicy::SHOW_ALL);
#elseglview->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, ResolutionPolicy::NO_BORDER);
#endif//取得了视窗的大小Size frameSize = glview->getFrameSize();vector<string> searchPath;//根据视窗大小与分辩率的大小选择相应的资源目录。//ipadhdif (frameSize.height > mediumResource.size.height){searchPath.push_back(largeResource.directory);director->setContentScaleFactor(MIN(largeResource.size.height/designResolutionSize.height, largeResource.size.width/designResolutionSize.width));}//ipadelse if (frameSize.height > smallResource.size.height){searchPath.push_back(mediumResource.directory);director->setContentScaleFactor(MIN(mediumResource.size.height/designResolutionSize.height, mediumResource.size.width/designResolutionSize.width));}//iphoneelse{searchPath.push_back(smallResource.directory);director->setContentScaleFactor(MIN(smallResource.size.height/designResolutionSize.height, smallResource.size.width/designResolutionSize.width));}// 设置资源目录FileUtils::getInstance()->setSearchPaths(searchPath);// 打开FPS显示director->setDisplayStats(true);// 设置每秒60帧director->setAnimationInterval(1.0 / 60);// 创建HelloWorld场景auto scene = HelloWorld::scene();// 运行场景director->runWithScene(scene);return true;
}// 当打电话时,游戏跳到后台,响应这句
void AppDelegate::applicationDidEnterBackground() {Director::getInstance()->stopAnimation();// 如果使用声音文件,下面可以用这句代码暂停// SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
}// 当电话打完以后,选择恢复游戏时,响应这句
void AppDelegate::applicationWillEnterForeground() {Director::getInstance()->startAnimation();// 如果使用声音文件,下面可以用这句代码恢复// SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
}

代码跟之前版本差别不大,要注意的是,cocos2d-x 3.0版本使用了auto自动类型变量,这个是C++11的新标准,比如原来要指定变量是int  float  double char,现在可以用auto,在赋值的时候,编译器会自动识别类型。  很方便吧

下面我们来看一下HelloWorld场景,它是一个基于cocos2d::Layer的派生类。cocos2d::Layer是什么?在这里,打个比方来建立一些基本的认知,比方说我们日常生活拍一部电影。从Cocos2d-x的框架体系来看,director是一个电影的导演   比如在北京拍  北京就是一个Scene   在王府井取一个景  那个王府井就是一个Layer  在王府井拍一个景的话 我们需要演员  也就是Sprite   演员需要有一些肢体语言的动作 也就是我们的Action   这样 相信大家也有一定的了解了吧。

一个程序要想表现出精彩的世界,要先建立一个Scene,然后增加Layer,然后在这些Layer上增加相应的人。而我们站在Layer上 也会跟着一起运动也就形成了Cocos中的Action。

OK,现在我们来看一下如何创建Scene和Layer:

HelloWorldScene.h:

#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__#include "cocos2d.h"class HelloWorld : public cocos2d::Layer
{
public:// 初始化virtual bool init();  // 静态函数创建Scenestatic cocos2d::Scene* scene();// 响应按钮退出程序void menuCloseCallback(Ref* sender);// 增加一个静态的create函数来创建实例。CREATE_FUNC(HelloWorld);
};#endif // __HELLOWORLD_SCENE_H__HelloWorldScene.cpp:#include "HelloWorldScene.h"
#include "AppMacros.h"
//使用Cocos2d-x命名空间
USING_NS_CC;
//静态函数创建场景
Scene* HelloWorld::scene()
{// 创建一个Scene,即刚才电影提到的北京auto scene = Scene::create();// 创建一个Layer,即王府井HelloWorld *layer = HelloWorld::create();// 将王府井这一个层放到北京这个大场景中scene->addChild(layer);return scene;
}// 初始化
bool HelloWorld::init()
{//先进行初始化if ( !Layer::init() ){return false;}//取得分辩率的大小及原点坐标auto visibleSize = Director::getInstance()->getVisibleSize();auto origin = Director::getInstance()->getVisibleOrigin();// 创建一个菜单项,它由两张图片来表现普通状态和按下状态,设置按下时调用menuCloseCallback函数响应关闭auto closeItem = MenuItemImage::create("CloseNormal.png","CloseSelected.png",CC_CALLBACK_1(HelloWorld::menuCloseCallback,this));closeItem->setPosition(origin + Point(visibleSize) - Point(closeItem->getContentSize() / 2));//由菜单项创建菜单.auto menu = Menu::create(closeItem, NULL);menu->setPosition(Point::ZERO);this->addChild(menu, 1);//创建一个文字标签auto label = LabelTTF::create("Hello World", "Arial", TITLE_FONT_SIZE);// 设置居中显示label->setPosition(Point(origin.x + visibleSize.width/2,origin.y + visibleSize.height - label->getContentSize().height));// 将文字标签放到当前Layer中。this->addChild(label, 1);// 增加一个图片精灵auto sprite = Sprite::create("HelloWorld.png");// 设置居中显示sprite->setPosition((ccp(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));//将Sprite放到当前Layer中。this->addChild(sprite);return true;
}//响应菜单按下时的事件处理
void HelloWorld::menuCloseCallback(Ref* sender)
{//如果是WP8平台,弹出消息框提示一下。
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WP8) || (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT)MessageBox("You pressed the close button. Windows Store Apps do not implement a close button.","Alert");return;
#endif//否则,终止程序。Director::getInstance()->end();//退出程序
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)exit(0);
#endif
}

Layer中增加了Sprite(精灵),Menu(按钮),LabelTTF(文字)等表现物,有了这些表现物,一个Layer(层)才有价值。

好了  学习的时间总是过的很快,珍惜现在,展望未来,我们下次再见:)

By:Net Fly

Cocos2d-x 3.0正式版 HelloWorld分析相关推荐

  1. [Android应用]《花界》V1.0 正式版隆重发布!

    http://www.cnblogs.com/qianxudetianxia/archive/2012/04/05/2433669.html 1. 软件说明(1). 花界是一款看花软件:"看 ...

  2. [Android应用]《花界》V1.0 正式版隆重发布!

    1. 软件说明(1). 花界是一款看花软件:"看花,议花,说花,提高您的赏花素养!". (2). 发布<花界>V1.0正式版,一是检验,综合,统一本博客技术分析,二是从 ...

  3. ASP.NET 2.0 正式版中无刷新页面的开发

    ASP.NET 2.0 正式版中无刷新页面的开发 在已经发布的 ASP.NET2.0 中,无刷新页面开发相关部分同 beta2 有不少改动.而且在越来越多的 Ajax 开发包被开发出来的情况下, AS ...

  4. php log pecl,PHP日志扩展SeasLog-1.0.0正式版在PECL发布

    PHP日志扩展SeasLog-1.0.0正式版在PECL发布 发布于 2014-07-29 07:00:26 | 140 次阅读 | 评论: 0 | 来源: 网友投递 SeasLog PHP日志扩展S ...

  5. Cocos2d-x 3.0正式版及android环境搭建

    开发环境是:mac + xcode + eclipse ,在win以下的环境和这个都是一样的,唯一不一样的就是环境变量的配置. 以下主要介绍cocos2d-x环境的设置以及android的环境搭建 1 ...

  6. 余承东:华为6G研发还需10年;库克“iPhone 11势头强劲”;TensorFlow 2.0正式版发布​ | 极客头条...

    快来收听极客头条音频版吧,智能播报由标贝科技提供技术支持. 「CSDN 极客头条」,是从 CSDN 网站延伸至官方微信公众号的特别栏目,专注于一天业界事报道.风里雨里,我们将每天为朋友们,播报最新鲜有 ...

  7. Vista下最好用输入法 - 搜狗拼音输入法4.0正式版闪亮登场!

    Vista之家(www.vista123.com): 搜狗拼音4.0正式版闪亮登场!十亿中国人名,一次拼写成功! 人名智能组词:是搜狗拼音通过对输入的拼音进行智能分析,根据拼音对应的文字组合为成千上万 ...

  8. 赛桨PaddleScience v1.0正式版发布,飞桨科学计算能力全面升级!

    AI for Science日益表现出突破传统科学研究能力瓶颈的巨大潜力,正在成为全球科学研究新范式.近年来,各学科不断加入,模型精度.泛化性逐渐提高,不同技术路径.不同应用场景的AI for Sci ...

  9. StartOS 5.0 正式版发布

    StartOS 5.0正式版发布了. StartOS -- 是由东莞瓦力网络科技有限公司发行的开源操作系统,符合国人的使用习惯,预装常用的精品软件,操作系统具有运行速度快,安全稳定,界面美观,操作简洁 ...

最新文章

  1. 寻找一个字符串的重复子串 后缀数组
  2. A English version for my blog start.
  3. Codeforces Round #762 (Div. 3)
  4. 友善串口工具接收数据随机换行_使用Python3+PyQT5+Pyserial 实现简单的串口工具方法...
  5. 1.1.0-简介-P12-分布式锁的解决方案(二)
  6. Collection 属性ArrayList.add方法内部调用过程
  7. mac u盘装linux系统教程,mac上制作linux系统U盘安装盘
  8. 3.3 以太网交换机
  9. PDF文档阅读软件眼睛保护色设置参数
  10. JanusGraph对于Gremlin查询语言的介绍
  11. 小米蓝牙耳机使用说明_小米10手机专用?小米“真无线蓝牙耳机Air 2s”评测
  12. Delphi中使用Imageen控件将图像文件转换成PDF
  13. html5的指南针app,HTML5 App实战(五):指南针
  14. 计算H时M分S秒以后是_关于工程量计算-深圳工程量计算培训
  15. 软考常考的四种设计模式
  16. JS实现统一社会信用代码的效验(组织机构代码效验)
  17. vmware启动报错Entering emergency mode
  18. 杭电OJ 1181(C++)
  19. Sourcetree安装详细(最新版本)
  20. 改变人类进程的,除了霍金,还有他的好基友们

热门文章

  1. python中的汉字编码(转载,已经注明转载地址)
  2. 多元函数的微分中值定理的推广 (原创)
  3. 车载诊断协议UDS——诊断刷写(Software Update)
  4. 小米手机多功能计算机都怎么使用方法,MIUI12.5手机电脑如何同步使用-小米11MIUI12.5新功能miui+使用方法...
  5. php银行卡账户类型查询接口
  6. 附视频教程|如何优雅扩容云硬盘
  7. Abaqus子程序Vumat报错Bad material definition
  8. 无线网络的应用——无人机蜂群
  9. WmiPrvSE.exe内存占用异常
  10. 有没有哪个趋势指标,更好使?