cocos2dx在c++中進行Android界面的跳轉

在使用Cocos2dx進行Android開發的時候,有時候想在c++中使用java編寫的本地界面,並進行跳轉。

首先在Android中添加本地activity:

package org.cocos2dx.cpp;

import android.app.Activity;
import android.os.Bundle;

public class CocoActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		
		super.onCreate(savedInstanceState);
	}

}

不要忘記在添加以下注冊activity的代碼:

<activity android:name="org.cocos2dx.cpp.CocoActivity"></activity>


本地有一個和Cocos2dx綁定的界面AppActivity:

在AppActivity中添加如下代碼:


public class AppActivity extends Cocos2dxActivity {
	static AppActivity context;//聲明靜態變量代表本界面

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		context = this;//此處爲問題關鍵把本界面賦值給靜態變量,以便獲取本變量
	}
        /*本靜態方法用來獲取本界面*/
	public static Object getCon() {
		return context;
	}

        /*該非靜態方法用來進行頁面跳轉*/
	public void startActivity() {

		Intent intent = new Intent(this, Coco.class);
		startActivity(intent);

	}
}

以下是在c++中添加的代碼:


JniMethodInfo minfo;
	bool isHave = JniHelper::getStaticMethodInfo(minfo,/*JniMethodInfo的引用*/
			"org/cocos2dx/cpp/AppActivity",/*類的路徑*/
			"getCon",/*函數名*/
			"()Ljava/lang/Object;");/*函數類型簡寫*/
	jobject activityObj;//調用靜態方法獲取要跳轉的界面的object
	if (isHave) {
				//CallStaticObjectMethod調用java函數,並把返回值賦值給activityObj
				activityObj = minfo.env->CallStaticObjectMethod(minfo.classID,
						minfo.methodID);
			}
		isHave = JniHelper::getMethodInfo(minfo,/*JniMethodInfo的引用*/
		"org/cocos2dx/cpp/AppActivity",/*類的路徑*/
		"startActivity",/*函數名*/
		"()V");/*函數類型簡寫*/
        
		if (isHave) {
			//CallStaticObjectMethod調用java函數,並把返回值賦值給activityObj
			minfo.env->CallVoidMethod(activityObj,
					minfo.methodID);//通過獲取的object調用非靜態方法來進行界面跳轉
		}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章