首页 > 游戏开发 > 如何制作友盟的Gideros插件
2015
09-12

如何制作友盟的Gideros插件

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 下载

最后编辑:
作者:freeman
这个作者貌似有点懒,什么都没有留下。

留下一个回复

你的email不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据