Gideros是国外一个免费的使用lua语言的游戏引擎,可跨平台发布。详细可去官网了解下,http://giderosmobile.com/
由于这个引擎的开发者不是很多,国内的大友盟并没有为此引擎制作出插件来,所以如果想在游戏中接入友盟统计,就得自己动手写一个。
参考这个指导,https://docs.google.com/document/pub?id=149g_P1YlE4_6v_hHbFx3YAaYpdU0HoM70XJSLTE38ww#h.3r88ekovnmfe
可以了解为Gideros怎么制作iOS平台的插件。
首先要先实现iOS访问友盟包的接口
#import "MobClick.h" #import "MobClickGameAnalytics.h" #include "gumeng.h" void gumeng_StartWithKey(const char * apiKey, const char * channel){ [MobClick startWithAppkey:[NSString stringWithUTF8String:apiKey] reportPolicy:BATCH channelId:[NSString stringWithUTF8String:channel]]; } void gumeng_StartLevel(const char * level){ [MobClickGameAnalytics startLevel:[NSString stringWithUTF8String:level]]; } void gumeng_FinishLevel(const char * level){ [MobClickGameAnalytics finishLevel:[NSString stringWithUTF8String:level]]; } void gumeng_FailLevel(const char * level){ [MobClickGameAnalytics failLevel:[NSString stringWithUTF8String:level]]; } void gumeng_PostEvent(const char * event){ [MobClick event:[NSString stringWithUTF8String:event]]; } void gumeng_BeginPage(const char * page){ [MobClick beginLogPageView:[NSString stringWithUTF8String:page]]; } void gumeng_EndPage(const char * page){ [MobClick endLogPageView:[NSString stringWithUTF8String:page]]; } |
保存为gumeng-ios.m,并编写它的头文件gumeng.h
然后编写绑定接口,让gideros可以访问的代码,
static void g_initializePlugin(lua_State *L) { lua_getglobal(L, "package"); lua_getfield(L, -1, "preload"); lua_pushcfunction(L, loader); lua_setfield(L, -2, "umeng"); lua_pop(L, 2); } static void g_deinitializePlugin(lua_State *L) { } REGISTER_PLUGIN("Umeng", "1.0") |
这三处代码的作用是注册umeng这个插件给gideros,让它初始化这个插件
static int loader(lua_State* L) { lua_newtable(L); lua_pushcfunction(L, startWithKey); lua_setfield(L, -2, "startWithKey"); lua_pushcfunction(L, startLevel); lua_setfield(L, -2, "startLevel"); lua_pushcfunction(L, finishLevel); lua_setfield(L, -2, "finishLevel"); lua_pushcfunction(L, failLevel); lua_setfield(L, -2, "failLevel"); lua_pushcfunction(L, postEvent); lua_setfield(L, -2, "postEvent"); lua_pushcfunction(L, beginPage); lua_setfield(L, -2, "beginPage"); lua_pushcfunction(L, endPage); lua_setfield(L, -2, "endPage"); lua_pushvalue(L, -1); lua_setglobal(L, "umeng"); return 1; } |
然后加入这些方法,就可以在Gideros里使用lua语句调用这些方法,它们的实现是
static int startWithKey(lua_State *L) { gumeng_StartWithKey(luaL_checkstring(L, 1),luaL_checkstring(L, 2)); return 0; } static int startLevel(lua_State *L) { gumeng_StartLevel(luaL_checkstring(L, 1)); return 0; } static int finishLevel(lua_State *L) { gumeng_FinishLevel(luaL_checkstring(L, 1)); return 0; } static int failLevel(lua_State *L) { gumeng_FailLevel(luaL_checkstring(L, 1)); return 0; } static int postEvent(lua_State *L) { gumeng_PostEvent(luaL_checkstring(L, 1)); return 0; } static int beginPage(lua_State *L) { gumeng_BeginPage(luaL_checkstring(L, 1)); return 0; } static int endPage(lua_State *L) { const char *page = luaL_checkstring(L, 1); gumeng_EndPage(page); return 0; } |
方法很简单,就是用luaL_checkstring来取出lua中调用的方法里的参数,然后传给gumeng去处理
在Gideros中调用这个插件也很简单
require "umeng" umeng.startWithKey("*****","AppStore") |
这样就可以了,如代码所示,要调用之前gumeng里定义的方法,就是umeng.function()这样的格式
再举个例子,要调用友盟上报自定义事件,那么就在Gideros里添加这样的代码
umeng.postEvent("***") |
至此,插件就编写完成了,详细的代码可以去 https://github.com/freeman5860/UmengPlugin/tree/master 下载
- 本文固定链接: https://freemanapp.com/zh/?p=108
- 转载请注明: freeman 于 FreemanApp 发表