犹豫把 SFLuaAdapter 初始化OnGLThread 在GL线程中回调写成 OnUiThread了。。导致了OpenGL error 以为是易接没有在GLThread中回调。然后自己实现了一遍同样的接口。后来越想越不对翻看易接文档多次才发现他有注册 GLThread 回调。主要是以前才开始接入什么都拷贝,然后自己修改init回调。然后没在意,强迫症犯了才修改。
易接代码:
SFLuaAdapter.init(Cocos2dxHelper.getActivity(), new SFActionCallback() { @Override public void callback(Runnable run) { AppActivity.this.runOnGLThread(run); } }); 错误修改 SFLuaAdapter.init(Cocos2dxHelper.getActivity(), new SFActionCallback() { @Override public void callback(Runnable run) { Cocos2dxHelper.runOnUiThread(run); } });由于程序员的强迫症犯了,我想要的修改: /* 易接SDK Begin */ SFLuaAdapter.init(Cocos2dxHelper.getActivity(), new SFActionCallback() { @Override public void callback(Runnable run) { Cocos2dxHelper.runOnGLThread(run); } }); /* 易接SDK End */ 重新实现一遍的接口,
package org.cocos2dx.lua; import java.util.HashMap; import java.util.Map; import org.cocos2dx.lib.Cocos2dxHelper; import org.cocos2dx.lib.Cocos2dxLuaJavaBridge; import org.json.JSONException; import org.json.JSONObject; import com.snowfish.cn.ganga.offline.helper.SFCommonSDKInterface; import com.snowfish.cn.ganga.offline.helper.SFExtendListener; import com.snowfish.cn.ganga.offline.helper.SFGameExitListener; import com.snowfish.cn.ganga.offline.helper.SFIPayResultListener; import com.snowfish.cn.ganga.offline.helper.SFOfflineInitListener; public class YiJieLua { private static boolean isInit = false; public static void onPause(){ if(isInit) SFCommonSDKInterface.onPause(Cocos2dxHelper.getActivity()); } public static void onDestroy(){ if(isInit) SFCommonSDKInterface.onDestroy(Cocos2dxHelper.getActivity()); } public static void onResume(){ if(isInit) SFCommonSDKInterface.onResume(Cocos2dxHelper.getActivity()); } public static void onInit(final int luaFunc) { if (isInit){ return; } isInit = true; Cocos2dxHelper.runOnUiThread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub SFCommonSDKInterface.onInit(Cocos2dxHelper.getActivity(), new SFOfflineInitListener() { @Override public void onResponse(String tag, String value) { // TODO Auto-generated method stub JSONObject jsonObject = new JSONObject(); try { jsonObject.put("tag", tag); jsonObject.put("value", value); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } Cocos2dxHelper.runOnGLThread(luaFunc, jsonObject.toString(), false); } }); } }); } public static void viewMoreGames(){ Cocos2dxHelper.runOnUiThread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub SFCommonSDKInterface.viewMoreGames(Cocos2dxHelper.getActivity()); } }); } // public static void extend(final String data, final Map<String, Integer> luaFuncs){ // Cocos2dxHelper.runOnUiThread(new Runnable() { // // @Override // public void run() { // // TODO Auto-generated method stub // Map<String, SFExtendListener> sfExtendMap = new HashMap<String, SFExtendListener>(); // for (final Map.Entry<String, Integer> entry : luaFuncs.entrySet()) { // sfExtendMap.put(entry.getKey(), new SFExtendListener() { // // @Override // public void onResponse(String tag, String value) { // // TODO Auto-generated method stub // // JSONObject jsonObject = new JSONObject(); // try { // jsonObject.put(tag, value); // } catch (JSONException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } // Cocos2dxHelper.runOnGLThread(entry.getValue(), jsonObject.toString(), true); // } // }); // } // SFCommonSDKInterface.extend(Cocos2dxHelper.getActivity(), data, sfExtendMap); // } // }); // } public static void extend(final String data, final int count, final int luaFunc){ Cocos2dxHelper.runOnUiThread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub Map<String, SFExtendListener> sfExtendMap = new HashMap<String, SFExtendListener>(); for (int i = 0; i < count; i++) { final int luaFuncIndex = i; Cocos2dxLuaJavaBridge.retainLuaFunction(luaFunc); sfExtendMap.put(String.valueOf(i), new SFExtendListener() { @Override public void onResponse(String tag, String value) { // TODO Auto-generated method stub JSONObject jsonObject = new JSONObject(); try { jsonObject.put("result", luaFuncIndex); jsonObject.put("value", value); jsonObject.put("tag", tag); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } Cocos2dxHelper.runOnGLThread(luaFunc, jsonObject.toString(), true); } }); } Cocos2dxLuaJavaBridge.releaseLuaFunction(luaFunc); SFCommonSDKInterface.extend(Cocos2dxHelper.getActivity(), data, sfExtendMap); } }); } public static String getUserId(){ return String.valueOf(SFCommonSDKInterface.getUserId()); } public static boolean isPaid(String payId) { return SFCommonSDKInterface.isPaid(Cocos2dxHelper.getActivity(), payId); } public static void setPaid(String payId) { SFCommonSDKInterface.setPaid(Cocos2dxHelper.getActivity(), payId); } public static boolean isMusicEnable(){ return SFCommonSDKInterface.isMusicEnabled(Cocos2dxHelper.getActivity()); } public static void onExit(final int luaFunc){ Cocos2dxHelper.runOnUiThread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub SFCommonSDKInterface.onExit(Cocos2dxHelper.getActivity(), new SFGameExitListener() { @Override public void onGameExit(boolean isExit) { // TODO Auto-generated method stub JSONObject jsonObject = new JSONObject(); try { jsonObject.put("result", isExit ? "exit" : "noExit"); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } Cocos2dxHelper.runOnGLThread(luaFunc, jsonObject.toString(), true); } }); } }); } public static void recharge(final int price, final String chargeDesc, final String sign, final int luaFunc){ Cocos2dxHelper.runOnUiThread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub SFCommonSDKInterface.recharge(Cocos2dxHelper.getActivity(), price, chargeDesc, sign, new SFIPayResultListener() { @Override public void onSuccess(String arg0) { // TODO Auto-generated method stub System.out.println("onSuccess = " + arg0); JSONObject jsonObject = new JSONObject(); try { jsonObject.put("result", "success"); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } Cocos2dxHelper.runOnGLThread(luaFunc, jsonObject.toString(), true); } @Override public void onFailed(String arg0) { // TODO Auto-generated method stub System.out.println("onFailed = " + arg0); JSONObject jsonObject = new JSONObject(); try { jsonObject.put("result", "fail"); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } Cocos2dxHelper.runOnGLThread(luaFunc, jsonObject.toString(), true); } @Override public void onCanceled(String arg0) { // TODO Auto-generated method stub System.out.println("onCanceled = " + arg0); JSONObject jsonObject = new JSONObject(); try { jsonObject.put("result", "cancel"); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } Cocos2dxHelper.runOnGLThread(luaFunc, jsonObject.toString(), true); } }); } }); } public static void pay(final String payid, final int luaFunc) { Cocos2dxHelper.runOnUiThread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub SFCommonSDKInterface.pay(Cocos2dxHelper.getActivity(), payid, new SFIPayResultListener() { @Override public void onSuccess(String arg0) { // TODO Auto-generated method stub System.out.println("onSuccess = " + arg0); JSONObject jsonObject = new JSONObject(); try { jsonObject.put("result", "success"); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } Cocos2dxHelper.runOnGLThread(luaFunc, jsonObject.toString(), true); } @Override public void onFailed(String arg0) { // TODO Auto-generated method stub System.out.println("onFailed = " + arg0); JSONObject jsonObject = new JSONObject(); try { jsonObject.put("result", "fail"); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } Cocos2dxHelper.runOnGLThread(luaFunc, jsonObject.toString(), true); } @Override public void onCanceled(String arg0) { // TODO Auto-generated method stub System.out.println("onCanceled = " + arg0); JSONObject jsonObject = new JSONObject(); try { jsonObject.put("result", "cancel"); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } Cocos2dxHelper.runOnGLThread(luaFunc, jsonObject.toString(), true); } }); } }); } }