Cocos2d-x 3.0正式版 HelloWorld分析
我们不管是对于一款编程语言的学习,还是对一个游戏引擎的学习,第一个基本都是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分析相关推荐
- [Android应用]《花界》V1.0 正式版隆重发布!
http://www.cnblogs.com/qianxudetianxia/archive/2012/04/05/2433669.html 1. 软件说明(1). 花界是一款看花软件:"看 ...
- [Android应用]《花界》V1.0 正式版隆重发布!
1. 软件说明(1). 花界是一款看花软件:"看花,议花,说花,提高您的赏花素养!". (2). 发布<花界>V1.0正式版,一是检验,综合,统一本博客技术分析,二是从 ...
- ASP.NET 2.0 正式版中无刷新页面的开发
ASP.NET 2.0 正式版中无刷新页面的开发 在已经发布的 ASP.NET2.0 中,无刷新页面开发相关部分同 beta2 有不少改动.而且在越来越多的 Ajax 开发包被开发出来的情况下, AS ...
- 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 ...
- Cocos2d-x 3.0正式版及android环境搭建
开发环境是:mac + xcode + eclipse ,在win以下的环境和这个都是一样的,唯一不一样的就是环境变量的配置. 以下主要介绍cocos2d-x环境的设置以及android的环境搭建 1 ...
- 余承东:华为6G研发还需10年;库克“iPhone 11势头强劲”;TensorFlow 2.0正式版发布 | 极客头条...
快来收听极客头条音频版吧,智能播报由标贝科技提供技术支持. 「CSDN 极客头条」,是从 CSDN 网站延伸至官方微信公众号的特别栏目,专注于一天业界事报道.风里雨里,我们将每天为朋友们,播报最新鲜有 ...
- Vista下最好用输入法 - 搜狗拼音输入法4.0正式版闪亮登场!
Vista之家(www.vista123.com): 搜狗拼音4.0正式版闪亮登场!十亿中国人名,一次拼写成功! 人名智能组词:是搜狗拼音通过对输入的拼音进行智能分析,根据拼音对应的文字组合为成千上万 ...
- 赛桨PaddleScience v1.0正式版发布,飞桨科学计算能力全面升级!
AI for Science日益表现出突破传统科学研究能力瓶颈的巨大潜力,正在成为全球科学研究新范式.近年来,各学科不断加入,模型精度.泛化性逐渐提高,不同技术路径.不同应用场景的AI for Sci ...
- StartOS 5.0 正式版发布
StartOS 5.0正式版发布了. StartOS -- 是由东莞瓦力网络科技有限公司发行的开源操作系统,符合国人的使用习惯,预装常用的精品软件,操作系统具有运行速度快,安全稳定,界面美观,操作简洁 ...
最新文章
- 寻找一个字符串的重复子串 后缀数组
- A English version for my blog start.
- Codeforces Round #762 (Div. 3)
- 友善串口工具接收数据随机换行_使用Python3+PyQT5+Pyserial 实现简单的串口工具方法...
- 1.1.0-简介-P12-分布式锁的解决方案(二)
- Collection 属性ArrayList.add方法内部调用过程
- mac u盘装linux系统教程,mac上制作linux系统U盘安装盘
- 3.3 以太网交换机
- PDF文档阅读软件眼睛保护色设置参数
- JanusGraph对于Gremlin查询语言的介绍
- 小米蓝牙耳机使用说明_小米10手机专用?小米“真无线蓝牙耳机Air 2s”评测
- Delphi中使用Imageen控件将图像文件转换成PDF
- html5的指南针app,HTML5 App实战(五):指南针
- 计算H时M分S秒以后是_关于工程量计算-深圳工程量计算培训
- 软考常考的四种设计模式
- JS实现统一社会信用代码的效验(组织机构代码效验)
- vmware启动报错Entering emergency mode
- 杭电OJ 1181(C++)
- Sourcetree安装详细(最新版本)
- 改变人类进程的,除了霍金,还有他的好基友们
热门文章
- python中的汉字编码(转载,已经注明转载地址)
- 多元函数的微分中值定理的推广 (原创)
- 车载诊断协议UDS——诊断刷写(Software Update)
- 小米手机多功能计算机都怎么使用方法,MIUI12.5手机电脑如何同步使用-小米11MIUI12.5新功能miui+使用方法...
- php银行卡账户类型查询接口
- 附视频教程|如何优雅扩容云硬盘
- Abaqus子程序Vumat报错Bad material definition
- 无线网络的应用——无人机蜂群
- WmiPrvSE.exe内存占用异常
- 有没有哪个趋势指标,更好使?