【新手必看】cocos2d-x 如何创建第一个hello World工程以及游戏窗口运行机制与生命周期讲解 【详细多图】

前言:

上一篇文章说了cocos2d-x 和 cocosStudio 在win10的搭建

本篇来说一下 工程创建以及怎么运行起来的以及运行的生命周期

创建工程

要创建一个开发者账号

打开以后主界面是这样的
在这里插入图片描述
然后选择菜单栏的 文件 新建项目
在这里插入图片描述
这就创建好了
咱们先预览一下
在这里插入图片描述
在这里插入图片描述

工程介绍

找到本地的工程项目文件夹看一下都有什么

在这里插入图片描述
在这里插入图片描述
classes 下面就是咱们的c++文件 咱们先不看

cocosstudio 是cocosstudio 的文件 有背景的图片和 场景的文件
在这里插入图片描述

打开MainScene.csd 看了一下 就是个配置文件
在这里插入图片描述
记录了 一些参数 就是这个东西
在这里插入图片描述

下面的 android 和 mac 咱们不看 那是其它平台的
在这里插入图片描述

这个 proj.win32 也就是咱们 的vs项目 一会仔细说

Resources 资源文件 一些贴图啊 音频啊 乱七八糟的都放到这里
在这里插入图片描述

如果我们改了界面 要更新本地的c++ 代码
在这里插入图片描述
在这里插入图片描述
发布为 vs 工程 就ok了 再次打开的vs工程 就是有新的改动了
不用担心 我们之前的vs里写的代码不会给你变 我都踩过坑了

下面我们开始看代码
这才是最重要的 因为我的cocosStudio 也不太会用

代码

这个cocosStudio 生成的项目 windows SDK 和我电脑的不匹配 改一下就行
在这里插入图片描述
看一下代码文件
在这里插入图片描述
AppDelegate.h
AppDelegate.cpp
HelloWorldScene.h
HelloWorldScene.cpp
main.h
main.cpp

函数入口 程序的启动

先从main 函数开始看吧

在这里插入图片描述

创建一个 应用程序实例
对象 是 AppDelegate 进去看一下

在这里插入图片描述
继承了cocos2d 的applicaion
一个默认构造析构 都是空的不看了

虚函数 virtual void initGLContextAttrs();
在这里插入图片描述
我们上节说过了 cocos2d-x的底层是c++和openglES 实现的
这个函数是 设置一下opengl 的r g b a 深度 模板等属性
不用管

下面的三个函数也就是我们说的程序的生命周期

生命周期

比如 你正在打手机游戏 那么突然来电话了 你的游戏会进入后台
当你打完电话在把游戏切过来 发现已经打死了

咱们把这3个函数打一下log 看一下什么时间触发

加上头文件

#include “cocos2d.h”
#include “ui/CocosGUI.h”
#include “cocostudio/CocoStudio.h”

cocos 有提供的log宏 大小写别打错了 打错了会保错 是宏定义

在这里插入图片描述
给每个函数都打上log 咱们看输出

在这里插入图片描述

我录制了个gif 可以清晰的看到

applicationDidFinishLaunching
是程序一打开以后会进入的

applicationDidEnterBackground
我们最小化放到后台时的会调用

applicationWillEnterForeground
从最小化切换回来会调用的

ok 咱们细细看一下这几个函数

applicationDidFinishLaunching

在这里插入图片描述
最上面是初始化了一个 导演类
然后获取这个导演类的opengl 的视图

// initialize director
    auto director = Director::getInstance();
    auto glview = director->getOpenGLView();

如果没有 那么就创建一个视图 960*640 的标题为 csdnHelloWord 的窗口 大家可以改动

auto glview = director->getOpenGLView();
    if(!glview) {
        glview = GLViewImpl::createWithRect("csdnHelloWord", Rect(0, 0, 960, 640));
        director->setOpenGLView(glview);
    }

下面设置了分辨率的大小 和显示模式

director->getOpenGLView()->setDesignResolutionSize(960, 640, ResolutionPolicy::SHOW_ALL);

要不要显示左下角的 FPS
设置FPS的帧率 也就是一秒多少张图片 默认是1秒60帧 人眼看这个帧率是最舒服的

    // 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);

在这里插入图片描述
GL verts: opengl 顶点个数
GL calls:绘制分为几部分
59.5/0.001: 当前帧率以及一帧要耗时几秒

然后下面是设置一下 资源文件的路径

又创建了一个场景 给到导演运行
这个场景 也就是我们HelloWorld 的场景
咱们等会看

在这里插入图片描述
下面的两个函数 比较简单了 暂停和开始
当切换到后台就暂停
回来就继续

AppDelegate 这个类 和 main 函数咱们也就逐行看完了 比较清晰了
下面看一下咱们的HelloWorldScene类

HelloWorldScene

在这里插入图片描述
HelloWorld 是继承 layer (层)

layer 和 scene 都是个抽象的概念

scene 就好比一个容器 里面包含了好多层 layer 比如有图片层 文字层
最后把这些层叠加起来 用场景显示出来
这个scene 就像一个栈 先添加的层会在下面
后添加的会盖住它 但是可以设置它的Z 也就是深度 在scene 层级中的位置

在这里插入图片描述
这个create 怎么来的?

在这里插入图片描述
进去看一下
原来在这里 create
在这里插入图片描述
这个宏的功能 创建一个当前类的对象 也就是我们的HelloWorld
然后初始化 并且加入到 cocos的内存的释放池中 cocos 自己实现管理内存的机制

如果没初始化成功就返回null了

看一下这个 在这里插入图片描述
看一下它的定义 有好多重载
咱们看两个
在这里插入图片描述
这就是往场景这个容器中放东西 看第二个有个 localZorder 就是指定它的深度
tag 就是个标签 设置了标签 可以在 scene 中 根据标签找到 这个节点
layer 层就是个节点

在这里插入图片描述

根据这个csb文件创建了一个节点
添加进去 结束

csb 文件就是游戏文件 里面是二进制的我们看不到
它是在cocosStudio 中搞的
在这里插入图片描述
就在我们Resources 文件夹下

所以我们能看到 运行时的 cocos2d-x的logo
如果去掉 addChild 那么也就看不到了

结尾

我觉的看到这里应该是对 cocos2d-x的运行机制有个初步的理解了
后面我会写一些精灵,动作,场景切换等
我还是一个新手刚学 有不对的地方请大佬指正
另外如果本文对您有帮助给我点个赞或者关注,毕竟啰嗦了这么长时间手都酸了
谢谢大家

发布了171 篇原创文章 · 获赞 386 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/weixin_42837024/article/details/102859163