cocos2dx-3.0(2)------cpp-empty-test
来源:互联网 发布:ppt哪个软件 编辑:程序博客网 时间:2024/06/03 19:45
对于3.0以前的版本都是helloworld,在3.0里面改成cpp-empty-test
我们先来看看main.cpp,作为c、c++程序员,程序入口就是main.cpp所以他很重要,看下面代码:
#include "main.h"#include "../Classes/AppDelegate.h"USING_NS_CC;int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow){ UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine); // create the application instance AppDelegate app; return Application::getInstance()->run();}对于我,上面无关重要的(我自己觉得)我不管
int APIENTRY _tWinMain像这货根我们常见的不同,但是对我们重要吗?管他了,他就是一吊丝,还有下面这货
UNREFERENCED_PARAMETER(hPrevInstance);UNREFERENCED_PARAMETER(lpCmdLine);进去一看,没用!!
根我们有关,程序真正运行起来是这两行代码
AppDelegate app;return Application::getInstance()->run();上面代码涉及到两个类,我们来看看他们的关系
我们从根开始聊聊:
1.先看看ApplicationProtocol代码
class CC_DLL ApplicationProtocol{public: /** * @js NA * @lua NA */ virtual ~ApplicationProtocol() {} /** @brief Implement Director and Scene init code here. @return true Initialize success, app continue. @return false Initialize failed, app terminate. * @js NA * @lua NA */ virtual bool applicationDidFinishLaunching() = 0; /** @brief This function will be called when the application enters background. * @js NA * @lua NA */ virtual void applicationDidEnterBackground() = 0; /** @brief This function will be called when the application enters foreground. * @js NA * @lua NA */ virtual void applicationWillEnterForeground() = 0; /** @brief Callback by Director for limit FPS. @param interval The time, expressed in seconds, between current frame and next. * @js NA * @lua NA */ virtual void setAnimationInterval(double interval) = 0; /** @brief Get current language config @return Current language config * @js NA * @lua NA */ virtual LanguageType getCurrentLanguage() = 0; /** @brief Get current language iso 639-1 code @return Current language iso 639-1 code * @js NA * @lua NA */ virtual const char * getCurrentLanguageCode() = 0; /** @brief Get target platform * @js NA * @lua NA */ virtual Platform getTargetPlatform() = 0;};看到没,全是纯虚函数,好好根着学学吧,骚年!!(其实我就是那骚年)这样设计函数接口,大家知道含有纯虚函数的类为抽象类,不能实例化。
2.在来看看Application类
class CC_DLL Application : public ApplicationProtocol{public: /** * @js ctor */ Application(); /** * @js NA * @lua NA */ virtual ~Application(); /** @brief Run the message loop. */ int run(); /** @brief Get current applicaiton instance. @return Current application instance pointer. */ static Application* getInstance(); protected: static Application * sm_pSharedApplication;};
virtual bool applicationDidFinishLaunching() = 0;
virtual void applicationDidEnterBackground() = 0;virtual void applicationWillEnterForeground() = 0;
这是我简化后的,因为对于我们来说,只有这几个函数对于我们有用。需要注意一点Application继承于ApplicationProtocol但是他没有实现所有的纯虚函数,还有三个函数没有实现
所以Application也是抽象类
2.1 Application的构造函数:
Application::Application(): _instance(nullptr), _accelTable(nullptr){ _instance = GetModuleHandle(nullptr); _animationInterval.QuadPart = 0; CC_ASSERT(! sm_pSharedApplication); sm_pSharedApplication = this;}主要关注sm_pSharedApplication=this, 他保存了当前自己,他是个static Application的指针,他在下面这个函数接口中有用
Application* Application::getInstance(){ CC_ASSERT(sm_pSharedApplication); return sm_pSharedApplication;}他代替了3.0以前的
static Application* sharedApplication();前面我们看到main.cpp中Application::getInstance()->run();前面有AppDelegate app;大家也许发现,只是声明了一个AppDelegate的对象,却不用他,能不能把他去掉了?
答案是不能的,并且他写这里并不是无关紧要的,大家知道c++中有多态,当父类的函数中某个函数为虚函数时,他会主动调用子类的实现。我们知道AppDelegate中有个三个函数没有实现,他们是在AppDelegate中实现,大家调试一下就知道,这样一来,main.cpp分析完了
3.AppDelegate类
bool AppDelegate::applicationDidFinishLaunching() { // initialize director auto director = Director::getInstance(); auto glview = director->getOpenGLView(); if(!glview) {<span style="white-space:pre"></span>//修改主窗体名字<span style="white-space:pre"></span>glview = GLView::create("test");<span style="white-space:pre"></span>//重置窗体大小<span style="white-space:pre"></span>glview->setFrameSize(640, 480);
director->setOpenGLView(glview); } // turn on display FPS director->setDisplayStats(true); // set FPS. the default value is 1.0/60 if you don't call this director->setAnimationInterval(1.0 / 60); // create a scene. it's an autorelease object auto scene = HelloWorld::createScene(); // run director->runWithScene(scene); return true;}此函数是用来初始化程序的,这个函数和3.0以前也不一样了。3.0把GLView的一个对象放到导演类(Director)中。GLView是window框架设计的开始
运行程序时,大家发现左下角有几行数据,里面还有一些数字时不时改变一下,自己还不能控制是不是觉得很蛋疼,你终于不用蛋疼了,只需要把下面代码改一改
// turn on display FPS director->setDisplayStats(true);改成false,从此你的世界就清静了。
大家想说,我们怎么加内容在框架里面了?
================================================================华丽的分割线
恩,这集结束了,请看下集吧~~~~~~
- cocos2dx-3.0(2)------cpp-empty-test
- cpp-empty-test 程序流程
- Cocos2dx-3.1.1 探索之旅02----> 浅析cpp-empty-test运行流程
- Cocos2d-x 3.0 红孩儿私家必修:第二章cpp-empty-test:还是那个HelloWorld!
- Cocos2d-x 3.0 红孩儿私家必修 - 第二章 cpp-empty-test
- 第二章cpp-empty-test:还是那个HelloWorld!
- test.cpp
- test.cpp
- Empty test suite.
- Cocos2dx 追踪cpp-tests运行流程(2)
- 编译实验2-源文件(test.cpp)
- Cocos2dx-3.1.1 探索之旅02----> 浅析cpp-test运行流程
- SEH-test.cpp
- cocos 2d test-cpp 学习笔记之AppDelegate.cpp 代码分析
- cocos2dx cpp程序打印方法
- AndroidStudio运行时报告Empty test suite
- Junit测试出现 empty test suite
- cocos2d-x cpp-test学习
- OCP 1Z0 051 159
- uitableview+nav----2级视图控制器的内容
- 用栈来实现求数组中每个元素的左边第一个小和右边第一个小 -2014-03-26 20:35
- Swing中弹出对话框的几种方式_JOptionPane.showMessageDialog等详解
- POJ 3484 Showstopper
- cocos2dx-3.0(2)------cpp-empty-test
- 上了大一才知道的n多事
- 图论相关(更新5.31)
- 一个整数数列,元素取值可能是1~N(N是一个较大的正整数)中的任意一个数,相同数值不会重复出现。设计一个算法,找出数列中符合条件的数对的个数,满足数对中两数的和等于N+1
- 面试题:砝码问题
- Android 模拟器中安装软件程序如QQ
- 利用jdk自带的强悍工具jvisualvm检测多线程的竞争
- 代码创建TableView 代码例子
- POJ 3579- Median