概述
本文以 EditBox 的实现为例来介绍一些组件的实现逻辑。
engine 源码介绍
EditBox 的实现在 engine 的 CCEditBox.js
1 | let EditBox = cc.Class({ |
从代码可以看到,EditBox 的调用主要是通过 _impl
实现的,_impl
是 EditBox._ImplClass
的实例。EditBox._ImplClass
在不同的平台有不同的实现,下面分别来进行介绍。
H5平台
如果是 Web 模式:
1 | // CCEditBox.js |
1 | //WebEditBoxImpl.js |
editbox 的主要操作时通过 _elem
来实现,_elem
是通过获取 ‘input’ 组件来实现。HtmlInputElement 是 H5 原生的实现。
原生平台
在 Android 原生平台,EditBox._ImplClass
的实例化在 jsb-adapter 的 jsb-editbox.js 中进行。
1 | // jsb-editbox.js |
EditBox 的操作时通过 jsb.inputBox
实现的。
1 | // jsb-input.js |
然后通过 jsb 调用原生的实现。
1 | // jsb_global.cpp |
c++ 通过 jni 调用 Android 端来实现。
1 | // EditBox-android.cpp |
Cocos2dxEditBox 在 Android 端是继承自 EditText。