概述
本文开始对 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 |