本文通过分析cocos2dx提供的示例程序HelloCpp来分析cocos2dx的启动过程。
我们从HelloCpp.java开始:
- package org.cocos2dx.hellocpp;
- import org.cocos2dx.lib.Cocos2dxActivity;
- import android.os.Bundle;
- public class HelloCpp extends Cocos2dxActivity{
- protected void onCreate(Bundle savedInstanceState){
- super.onCreate(savedInstanceState);
- }
- static {
- System.loadLibrary("hellocpp");
- }
- }
package org.cocos2dx.hellocpp;
import org.cocos2dx.lib.Cocos2dxActivity;
import android.os.Bundle;
public class HelloCpp extends Cocos2dxActivity{
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}
static {
System.loadLibrary("hellocpp");
}
}
HelloCpp是一个Activity,首先会执行静态代码块,加载libhellocpp.so库,然后就是执行onCreate方法,这里调用了父类的onCreate方法。我们看看Cocos2dxActivity的onCreate方法,该类在cocos2dx的库工程libcocos2dx中:
- @Override
- protected void onCreate(final Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- sContext = this;
- this.mHandler = new Cocos2dxHandler(this);
- this.init();
- Cocos2dxHelper.init(this, this);
- }
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
sContext = this;
this.mHandler = new Cocos2dxHandler(this);
this.init();
Cocos2dxHelper.init(this, this);
}
这里主要是执行初始化过程,Cocos2dxHandler主要处理显示Dialog的消息,Cocos2dxHelper是个辅助类,我们主要看init()方法:
- public void init() {
- // FrameLayout
- ViewGroup.LayoutParams framelayout_params =
- new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
- ViewGroup.LayoutParams.FILL_PARENT);
- FrameLayout framelayout = new FrameLayout(this);
- framelayout.setLayoutParams(framelayout_params);
- // Cocos2dxEditText layout
- ViewGroup.LayoutParams edittext_layout_params =
- new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
- ViewGroup.LayoutParams.WRAP_CONTENT);
- Cocos2dxEditText edittext = new Cocos2dxEditText(this);
- edittext.setLayoutParams(edittext_layout_params);
- // ...add to FrameLayout
- framelayout.addView(edittext);
- // Cocos2dxGLSurfaceView
- this.mGLSurfaceView = this.onCreateView();
- // ...add to FrameLayout
- framelayout.addView(this.mGLSurfaceView);
- // Switch to supported OpenGL (ARGB888) mode on emulator
- if (isAndroidEmulator())
- this.mGLSurfaceView.setEGLConfigChooser(