cocos2d中间层创建(一)

cocos2d中间层创建(一),第1张

概述首先编辑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__

首先编辑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:
////  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


Js中进行调用:
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中间层创建(一)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1081514.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存