Cocos2d-x 3.0 红孩儿私家必修 - 第二章 cpp-empty-test
上一章我们讲到说曾经的HelloWorld演示更名为cpp-empty-test。
本章我们来分析一下
执行程序,我们能够看到熟悉的HelloWorld程序:与之前cocos2d-x2.x版本号的HelloCpp看起来没太大区别
主要有三点:
1,标题文字显示为Cpp Empty Test。
2,button由以下改到了上面。
3,左下角的信息显示有所不同
曾经显示的是(1)批次(2)每帧的平均执行秒数(3)FPS数。
如今改成了(1)OPENGL的顶点数量(2)OPENGL的批次(3)FPS数/每帧的平均执行秒数。
详细看下project代码:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvb0FtYW1hdHRoZXc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" height="230" width="331">
project的文件夹有两个
Classes:程序中的类。
- AppDelegate.h/cpp:Cocos2d-x程序框架
- AppMacros.h:所用到的宏,主要是设置分辩率及相应的资源文件夹
- HelloWorldScene.h/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;
// 执行它。
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();
// 取得OpenGL窗体
auto 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);
#else
glview->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, ResolutionPolicy::NO_BORDER);
#endif //取得了视窗的大小
Size frameSize = glview->getFrameSize(); vector<string> searchPath; //依据视窗大小与分辩率的大小选择对应的资源文件夹。 //ipadhd
if (frameSize.height > mediumResource.size.height)
{
searchPath.push_back(largeResource.directory); director->setContentScaleFactor(MIN(largeResource.size.height/designResolutionSize.height, largeResource.size.width/designResolutionSize.width));
}
//ipad
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));
}
//iphone
else
{
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();
}
代码跟之前版本号区别不大,只是这里要注意。3.0使用了auto自己主动类型变量,这个是C++11的新标准,比方原来要指定变量是int还是float。如今能够用auto。在赋值的时候,编译器自己主动识别类型。
以下,我们来看一下HelloWorld场景。
它是一个基于cocos2d::Layer的派生类。
cocos2d::Layer是什么?
在这里,我想打个例如来建立一些主要的认知,例如说我们生活在地球上,地球属于宇宙内的一部分。从Cocos2d-x的框架体系来看,我们是Sprite精灵。地球是Layer。而宇宙是Scene。
一个程序要想表现出精彩的世界,要先建立一个宇宙Scene,然后添加地球,月球。太阳等Layer,然后在这些Layer上添加对应的物体。而我们站在地球上,地球运动,我们也会跟着一起运动。
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(); // 静态函数创建Scene
static 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中添加了精灵,按钮,文字等表现物,有了这些表现物,一个Layer才有价值。
Cocos2d-x 3.0 红孩儿私家必修 - 第二章 cpp-empty-test的更多相关文章
- Cocos2d-x 3.0 红孩儿私家必修 - 第一章 初识Cocos2d-x 3.0project
第一章 初识Cocos2d-x 3.0project Cocos2d-x 3.0出来了,听说与之前版本号相比修改较大 做为一个游戏开发人员.我们应该欢迎Cocos2d-x持续的更新和强大,Coc ...
- Cocos2d-x 3.0 红孩儿私人义务教育 - 第一章 熟人Cocos2d-x 3.0project
Cocos2d-x 3.0 红孩儿私家必修 前言: 时光飞逝,每每看到博客上的回复和微博上的鼓舞,总会认为亏欠大家点什么.停下来太久.总是认为不太对劲,哈哈,时习之吧,望以此勉励大家. 红孩儿C ...
- 精通Web Analytics 2.0 (4) 第二章:选择你的网络分析灵魂伴侣的最佳策略
精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第二章:选择你的网络分析灵魂伴侣的最佳策略 在Web Analytics 2.0的新世界秩序中,您必须跳出"单一真理来 ...
- Laxcus大数据管理系统2.0(5)- 第二章 数据组织
第二章 数据组织 在数据的组织结构设计上,Laxcus严格遵循数据和数据描述分离的原则,这个理念与关系数据库完全一致.在此基础上,为了保证大规模数据存取和计算的需要,我们设计了大量新的数据处理技术.同 ...
- C# Language Specification 5.0 (翻译)第二章 词法结构
程序 C# 程序(program)由至少一个源文件(source files)组成,其正式称谓为编译单元(compilation units)[1].每个源文件都是有序的 Unicode 字符序列.源 ...
- Laxcus大数据操作系统2.0(5)- 第二章 数据组织
第二章 数据组织 在数据的组织结构设计上,Laxcus严格遵循数据和数据描述分离的原则,这个理念与关系数据库完全一致.在此基础上,为了保证大规模数据存取和计算的需要,我们设计了大量新的数据处理技术.同 ...
- Gradle2.0用户指南翻译——第二章. 概述
翻译项目请关注Github上的地址:https://github.com/msdx/gradledoc本文翻译所在分支:https://github.com/msdx/gradledoc/tree/2 ...
- Python黑帽编程 2.0 第二章概述
Python黑帽编程 2.0 第二章概述 于 20世纪80年代末,Guido van Rossum发明了Python,初衷据说是为了打发圣诞节的无趣,1991年首次发布,是ABC语言的继承,同时也是一 ...
- 高屋建瓴 cocos2d-x-3.0架构设计 Cocos2d (v.3.0) rendering pipeline roadmap(原文)
Cocos2d (v.3.0) rendering pipeline roadmap Why (the vision) The way currently Cocos2d does rendering ...
随机推荐
- javascript 不间断向左滚动图片
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 桂电在线-转变成bootstrap版2(记录学习bootstrap)
下载bootstrap框架https://github.com/twbs/bootstrap 或者 http://getbootstrap.com/ 拷贝模板 修改基本模板 语言zh-cn,标题,描述 ...
- ajax 异步上传视频带进度条并提取缩略图
最近在做一个集富媒体功能于一身的项目.需要上传视频.这里我希望做成异步上传,并且有进度条,响应有状态码,视频连接,缩略图. 服务端响应 { "thumbnail": "/ ...
- ThinkPHP HTML标签代码和UBB互相转换
1.UBB 转为 HTML TP的扩展里面自带一个ubb方法,用这个方法就能把用户输入的ubb格式代码转换为HTML标签的代码.这里用到的基本知识就是正则表达式啦,今天先不讲正则表达式. 来看一下TP ...
- mysql的数据类型int、bigint、smallint 和 tinyint取值范围 及varchar
使用整数数据的精确数字数据类型. bigint 从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字 ...
- 2016022607 - redis配置文件
在Redis有配置文件(redis.conf)可在Redis的根目录下找到.可以通过Redis的CONFIG命令设置所有Redis的配置. Redis的CONFIG命令的基本语法如下所示: redis ...
- Android Studio与Genymontion的安装
需要安装的软件: VirtualBox 5.1.4 Genymotion 2.7.2 Android Studio 2.1.2 安装步骤: 使用安装版安装Android Studio 1. 执 ...
- CSS user-select属性拾遗
昨天把Notebook整理了一下,去查了一下手册,原来之前比较忽略user-select这个属性,因为之前以为只有webkit才支持的.手册进行了补充: user-select 禁止用户选中文字 no ...
- [BZOJ 3198] [Sdoi2013] spring 【容斥 + Hash】
题目链接:BZOJ - 3198 题目分析 题目要求求出有多少对泉有恰好 k 个值相等. 我们用容斥来做. 枚举 2^6 种状态,某一位是 1 表示这一位相同,那么假设 1 的个数为 x . 答案就是 ...
- 【NOIP 2011】 观光公交
题目描述 Description 风景迷人的小城 Y 市,拥有n 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车,为游客提供更便捷的交通服务.观光公交车在第0 分钟出现在1号 ...