新做的cocos2d-x-3.3版本的Android工程,接入付费sdk时,想让游戏开始的时候执行sdk的初始化,可惜打开主AppActivity.java, 没有提供一个方法。
解决办法:
可以重写父类Cocos2dxActivity的init()方法;如:
public void init(){
super.init();
//在这里写游戏开始的时候要执行的方法
}
接下来想在支付的时候在静态方法中调用的Toast,报错。。。
解决办法:
在主Activity的init()方法中初始化一个Handler对象,如:
public static android.os.Handler dialogHandler = null; public static AppActivity activity; public void Init() { super.init(); dialogHandler = new android.os.Handler(); activity = this; } public static void showToastDialog(final String text) { dialogHandler.post(new Runnable() { public void run() { Toast.makeText(activity, text, Toast.LENGTH_SHORT).show(); } }); }
然后在别的地方调用AppActivity.showToastDialog("Toast显示");问题解决。
接下来又遇到一个问题:当付费成功后,调用static方法给游戏返回支付结果时,出现卡死的状态。。。
解决办法:
public static void PayFinish() { Cocos2dxGLSurfaceView.getInstance().queueEvent(new Runnable() { public void run() { // 这里调用传入游戏支付结果的static方法 } }); }
public Class Fruit extends Cocos2dxActivity{ public static Fruit context; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); context = this; } public static Fruit getContext() { return Fruit.context; } }
Fruit类大体就是这样
接下来调用(建议使用下面的方法):
// Fruit为当前主Activity public static void pay() { Fruit.getContext().runOnUiThread(new Runnable() { @Override public void run() { // 在这里写支付调用sdk的接口 } }); }