概述
本文开始对 cocos 引擎的初始化过程做一些简单的介绍。
渲染初始化
我们在上一篇 Cocos Creator – HelloWorld 工程 文章中介绍 Cocos2dxRenderer 时看到在 onSurfaceCreated 中调用 Cocos2dxRenderer.nativeInit 来对做一些引擎的初始化工作。
现在我们具体看看它的实现。
1 | // Cocos2dxRenderer.nativeInit |
初始化 Application
在 nativeInit 方法中,调用 cocos_android_app_init 生成 cocos2d::Application 对象。
1 | //jni/hellojavascript/main.cpp |
这个方法就是实例化了一个 AppDelegate 对象。这个类继承自 Application,重写了 applicationDidFinishLaunching 方法。
1 | // runtime-src/Classes/AppDelegate.cpp |
nativeInit 方法中调用 g_app->start() ,可见 app 的初始化工作主要在 applicationDidFinishLaunching 中完成的。
1 | // cocos2d-x-lite/cocos/platform/android/CCApplication-android.cpp |
注册模块
注册模块主要是完成 JSB 的绑定,这些注册模块的实现都在 cocos/scripting/js-bindings/manual/(手动绑定) 和 cocos/scripting/js-bindings/auto/(自动绑定) 里面定义。定义了一些可以在JS端调用的类、方法和属性。
1 | // cocos/scripting/js-bindings/manual/jsb_module_register.cpp |
jsb_register_global_variables 回调方法会注册一些全局的变量和方法。
1 | bool jsb_register_global_variables(se::Object* global) |
1 | bool register_all_renderer(se::Object* obj) |
1 | bool register_all_cocos2dx_manual(se::Object* obj) |
启动 ScriptEngine
1 | // cocos/scripting/js-bindings/jswrapper/v8/ScriptEngine.cpp |
渲染
初始化工作完成后就开始进行游戏渲染工作了,这里只简单介绍一下基本的渲染机制。
还是从 Cocos2dxRenderer.onDrawFrame 开始,前面也介绍过,onDrawFrame 每一帧都会调用一次来进行帧面面的渲染,渲染的方法主要是调用本地方法 Cocos2dxRenderer.nativeRender() 。
1 | // JniImp.cpp |