初识 Cocos

本文基于
1. Cocos2d-x 3.x
2. 平台是 Mac -> iOS

初始环境

首先,我们要去 http://www.cocos.com 下载这个引擎.在安装后获取一个 cocos 命令行工具,使用这个工具初始化项目相当方便.

创建项目
$ source ~/.bash_profile      //需要导入 cocos 的一些环境变量
$ cocos new MyGame -l cpp -d 
编译运行
$ cocos run -s ~/MyGame-p ios

可以看到在iOS 模拟器上 Run 起来了.另外,我们还可以在 proj.ios_mac 目录下看到 Xcode 的项目文件,打开,选择好 target, 也是同样可以 run 起来的.

初窥 cocos

打开 Xcode, 首先我们了解一下项目框架.

首先找入口.
在 iOS 层的布局为:
main -> AppController -> RootController -> CCEAGLView

而在 cocos 层的 
Director->GLView->CCEAGLView

在 didFinishLaunchingWithOptions 中可以看到他们的初始化,并且通过
    cocos2d::GLView *glview = cocos2d::GLViewImpl::createWithEAGLView(eaglView);
    cocos2d::Director::getInstance()->setOpenGLView(glview);
将 iOS 的 CCEAGLView 绑定给 cocos2d::Director 单例了.
游戏的 runloop

继续看下去:

Created with Raphaël 2.1.0 AppController AppController Application Application CCDirectorCaller CCDirectorCaller DisplayLinkDirector DisplayLinkDirector applicationDidFinishLaunching run startMainLoop

实际上在CCDirectorCaller 中挂了个 CADisplayLink 同屏刷新.循环调用 DisplayLinkDirector::mainLoop 方法. 到目前为止,程序逻辑的控制全权交给了 DisplayLinkDirector 单例.

DisplayLinkDirector

在 DisplayLinkDirector 中会不停通过 drawScene 渲染当前场景.
(初始化的例子中是在 AppDelegate::applicationDidFinishLaunching 调用 Director::runWithScene将默认的场景传入).

继续看 drawScene 内部的实现,会看到 _runningScene->render(_renderer); 在这里,绘图的控制权就交给了当前的场景.在 render 中进行场景树的渲染. sence 的 render方法中有一系列的绘图逻辑.例如
- 设置相机 Camera
- node 检测 visit //将需要绘制的节点载入 _renderer 中
- 以及实际的绘图操作: renderer->render();
- 需要说明的一点 3.x 的绘图逻辑实际上是将绘图命令抽象成 commands 放入 RenderQueue,所以可能在某些节点根本看不到 openGL 的绘图指令,这个在后面再详细说明.

至此,面向过程的分析有了个大概.接下来可以深入的研究下引擎的细节.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值