首先编辑Jsb中间层,主要是在AppDelegate中进行注册单例,在Js中进行调用
Jsb_lcm_API.h:
//// Jsb_lcm_API.h// MoonWarriors//// Created by xiaohei on 2/21/17.////#ifndef __LCM__Jsb_lcm_API__#define __LCM__Jsb_lcm_API__#include "JsAPI.h"#include "JsfrIEndAPI.h"#include "Js_bindings_lcm_API.h"extern JsClass *Js_cocos2dx_LCMAPI_class;extern JsObject *Js_cocos2dx_LCMAPI_prototype;////// @brIEf LCM API///voID Js_register_LCMAPI(jscontext* cx,JsObject* global );voID register_all_LCMAPI(jscontext* cx,JsObject* obj);#endif /* defined(__LCM__Jsb_lcm_API__) */
//// Jsb_lcm_API.cpp// MoonWarriors//// Created by xiaohei on 2/21/17.////#include "Jsb_lcm_API.h"////// @brIEf Js Internal header files///#include "JsAPI.h"#include "Scriptingcore.h"#include "cocos2d_specifics.hpp"#include "cocos2d.h"#include "AppDelegate.h"static bool empty_constructor(jscontext *cx,uint32_t argc,Jsval *vp) { return false;}JsClass *Js_cocos2dx_LCMAPI_class;JsObject *Js_cocos2dx_LCMAPI_prototype;extern JsObject *Jsb_cocos2d_ActionInterval_prototype;bool Js_cocos2dx_extension_LCMAPI_getLTotalBalance(jscontext *cx,Jsval *vp){ Jsval *argv = Js_ARGV(cx,vp); JsObject *obj = Js_THIS_OBJECT(cx,vp); Js_proxy_t *proxy = Jsb_get_Js_proxy(obj); LCMJsB::LCMAPI* cobj = (LCMJsB::LCMAPI *)(proxy ? proxy->ptr : NulL); JsB_PRECONDITION2( cobj,cx,false,"InvalID Native Object"); if (argc == 0) { std::string ret = cobj->getLTotalBalance(); Jsval Jsret = std_string_to_Jsval(cx,ret); Js_SET_RVAL(cx,vp,Jsret); return true; } Js_ReportError(cx,"wrong number of arguments: %d,was expecting %d",argc,0); return false;}bool Js_cocos2dx_extension_LCMAPI_lcmNotifyEveryday(jscontext *cx,Jsval *vp){ Jsval *argv = Js_ARGV(cx,vp); JsObject *obj = Js_THIS_OBJECT(cx,vp); Js_proxy_t *proxy = Jsb_get_Js_proxy(obj); LCMJsB::LCMAPI* cobj = (LCMJsB::LCMAPI *)(proxy ? proxy->ptr : NulL); JsB_PRECONDITION2( cobj,"InvalID Native Object"); if (argc == 6) { int hour = JsVAL_TO_INT(argv[0]); int min = JsVAL_TO_INT(argv[1]); Jsstring *str = JsVAL_TO_STRING(argv[2]); JsstringWrapper strWrap(str); std::string Title = strWrap.get(); Jsstring *str2 = JsVAL_TO_STRING(argv[3]); JsstringWrapper strWrap2(str2); std::string txt = strWrap2.get(); Jsstring *str3 = JsVAL_TO_STRING(argv[4]); JsstringWrapper strWrap3(str3); std::string icon = strWrap3.get(); int code = JsVAL_TO_INT(argv[5]); cobj->lcmNotifyEveryday(hour,min,Title,txt,icon,code); Js_SET_RVAL(cx,JsVAL_VOID); return true; } Js_ReportError(cx,6); return false;}voID Js_register_LCMAPI(jscontext *cx,JsObject *global) { Js_cocos2dx_LCMAPI_class = (JsClass *)calloc(1,sizeof(JsClass)); Js_cocos2dx_LCMAPI_class->name = "LCMAPI"; Js_cocos2dx_LCMAPI_class->addProperty = Js_PropertyStub; Js_cocos2dx_LCMAPI_class->delProperty = Js_DeletePropertyStub; Js_cocos2dx_LCMAPI_class->getProperty = Js_PropertyStub; Js_cocos2dx_LCMAPI_class->setProperty = Js_StrictPropertyStub; Js_cocos2dx_LCMAPI_class->enumerate = Js_EnumerateStub; Js_cocos2dx_LCMAPI_class->resolve = Js_ResolveStub; Js_cocos2dx_LCMAPI_class->convert = Js_ConvertStub; Js_cocos2dx_LCMAPI_class->finalize = Js_cocos2dx_LCMAPI_finalize; Js_cocos2dx_LCMAPI_class->flags = JsCLASS_HAS_RESERVED_SLOTS(4); static JsPropertySpec propertIEs[] = { {0,JsOP_NulLWRAPPER,JsOP_NulLWRAPPER} }; static JsFunctionspec funcs[] = { Js_FN("continueProcessing",Js_cocos2dx_extension_LCMAPI_continueProcessing,JsPROP_PERMANENT | JsPROP_ENUMERATE),Js_FN("LUpdateBalance",Js_cocos2dx_extension_LCMAPI_LUpdateBalance,Js_FN("checkBalanceEnoughForPay",Js_cocos2dx_extension_LCMAPI_checkBalanceEnoughForPay,2,Js_FN("setLExTradata",Js_cocos2dx_extension_LCMAPI_setLExTradata,Js_FN("getLAccesstoken",Js_cocos2dx_extension_LCMAPI_getLAccesstoken,Js_FN("getLUserStringInfo",Js_cocos2dx_extension_LCMAPI_getLUserStringInfo,Js_FN("getLIDFromUser",Js_cocos2dx_extension_LCMAPI_getLIDFromUser,Js_FN("getLTotalBalance",Js_cocos2dx_extension_LCMAPI_getLTotalBalance,Js_FN("getLPaIDBalance",Js_cocos2dx_extension_LCMAPI_getLPaIDBalance,Js_FN("getLFreeBalance",Js_cocos2dx_extension_LCMAPI_getLFreeBalance,Js_FN("getlisShowBalance",Js_cocos2dx_extension_LCMAPI_getlisShowBalance,Js_FN("setLMenubarVisible",Js_cocos2dx_extension_LCMAPI_setLMenubarVisible,Js_FN("showLCustomerService",Js_cocos2dx_extension_LCMAPI_showLCustomerService,Js_FN("lcmlogout",Js_cocos2dx_extension_LCMAPI_lcmlogout,Js_FN("lcmLogin",Js_cocos2dx_extension_LCMAPI_lcmLogin,Js_FN("lcmNotifyClean",Js_cocos2dx_extension_LCMAPI_lcmNotifyClean,Js_FN("lcmNotifyEveryday",Js_cocos2dx_extension_LCMAPI_lcmNotifyEveryday,6,Js_FS_END }; static JsFunctionspec st_funcs[] = { Js_FN("getInstance",Js_cocos2dx_extension_LCMAPI_getInstance,Js_FS_END }; Js_cocos2dx_LCMAPI_prototype = Js_InitClass( cx,global,NulL,Js_cocos2dx_LCMAPI_class,empty_constructor,// constructor propertIEs,funcs,// no static propertIEs st_funcs); TypeTest<LCMJsB::LCMAPI> t; Js_type_class_t *p; std::string typename = t.s_name(); if (_Js_global_type_map.find(typename) == _Js_global_type_map.end()) { p = (Js_type_class_t *)malloc(sizeof(Js_type_class_t)); p->Jsclass = Js_cocos2dx_LCMAPI_class; p->proto = Js_cocos2dx_LCMAPI_prototype; p->parentProto = Jsb_cocos2d_ActionInterval_prototype; _Js_global_type_map.insert(std::make_pair(typename,p)); }}voID register_all_LCMAPI(jscontext* cx,JsObject* obj){ Js::RootedValue nsval(cx); Js::Rootedobject ns(cx); Js_GetProperty(cx,obj,"LCMJsB",&nsval); if (nsval == JsVAL_VOID) { ns = Js_NewObject(cx,NulL); nsval = OBJECT_TO_JsVAL(ns); Js_SetProperty(cx,nsval); } else { Js_ValuetoObject(cx,nsval,&ns); } obj = ns; Js_register_LCMAPI(cx,obj);}
AppDelegate.cpp 中进行注册:
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)#include "../SDK/lcm9.3/LCMJs/Jsb_lcm_API.h"#include "../SDK/lcm9.3/LCMJs/Js_bindings_lcm_API.h"#endifScriptingcore* sc = Scriptingcore::getInstance(); #if (CC_TARGET_PLATFORM != CC_PLATFORM_WIN32) && (CC_TARGET_PLATFORM != CC_PLATFORM_MAC) //lcm sc->addRegisterCallback(register_all_LCMAPI);#endif
if (g_targetoS != TargetoS.windows && g_targetoS != TargetoS.MACOS && Mobagetool.isAvailable()) { LCMJsB.LCMAPI.getInstance().lcmNotifyClean(); LCMJsB.LCMAPI.getInstance().lcmNotifyEveryday(12,__getClIEntMsg(371),clIEnt_msg_hash[354].n,"icon",1); LCMJsB.LCMAPI.getInstance().lcmNotifyEveryday(18,clIEnt_msg_hash[356].n,2);}总结
以上是内存溢出为你收集整理的cocos2d中间层创建(一)全部内容,希望文章能够帮你解决cocos2d中间层创建(一)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)