您的位置:首页 > 移动开发 > Cocos引擎

使用quick-cocos-x接入GameCenter

2016-01-30 14:17 696 查看
摘要: 使用quick-cocos-x接入GameCenter

注:本人使用的是quick3.3版本,里面用到的一些类的路径可能会有不同,可以根据不同环境自行搜索使用的类所在位置,甚至调用的函数api也可能不同,但是只要明白作用,原理应该都是一样的,只是写法上可能略有区别

首先转载一篇GameCenter的使用指南,里面更多是如何对ios应用启用GameCenter的一些设置方法,主要是需要使用苹果开发者账户进行的一些设置

http://www.cocoachina.com/programmer/20101022/2229.html

转载的文章中的4开始往后的代码都是和GameCenter相关的一些具体实现代码,可以将这些方法直接放在quick cocos 的ios工程下的RootViewController.mm里作为RootViewController的对象方法。之前尝试改为类方法貌似会有问题,也可能是由于我还不大懂ios开发,如果有解决方式欢迎指教。

其中的authenticateLocalPlayer方法 为上面文章中启动GameCenter的登录模块。由于这些方法已经copy到RootViewController中作为RootViewController的对象方法,可以在quick cocos的ios工程下的AppController.mm中,在RootViewController初始化之后调用。如下:

viewController = [[RootViewController alloc] initWithNibName:nil bundle:nil];
viewController.wantsFullScreenLayout = YES;
viewController.view = eaglView;
// Set RootViewController to window
if ( [[UIDevice currentDevice].systemVersion floatValue] < 6.0)
{
// warning: addSubView doesn't work on iOS6
[window addSubview: viewController.view];
}
else
{
// use this method on ios6
[window setRootViewController:viewController];
}

[window makeKeyAndVisible];

//启动GameCenter登录
[viewController authenticateLocalUser];

这样在游戏起动时就可以启动登录GameCenter了。然后再在authenticateLocalPlayer 方法里可以处理登录成功的回调处理,登录成功后,可以从GKLocalPlayer里拿到GameCenter的一些参数,比如playerId,friend等,此时你可以选择将这些信息先存起来。 接着可以启动 cocos 的app正式进入游戏.

那么进入游戏后我们如何取到这些信息呢?这就需要使用quick 提供的lua调用OC的接口了

位置在quick/framework/luaoc.lua里。用到的函数就是luaoc.callStaticMethod,注意这个函数只能调用OC的类方法(也就是前面是+号的方法),具体需要传入的参数在lua文件的注视里已经写的很详细了,这里不再叙述了。注意其中一个args参数,里面是传给OC的参数字典。可以将回调函数的handle传入 用于执行lua调用OC后的回调。

另外注意一点,在OC这边和lua交互用到的一些方法需要先导入下面几个头文件

#import "cocos2d.h"
#include "CCLuaEngine.h"
#include "CCLuaBridge.h"


例如我要调用的是OC下面的一个叫login的函数,其中dict参数就是从lua那里传过来的args

+ (void)login:(NSDictionary*)dict {
loginListener = [[dict objectForKey:@"loginListener"] intValue];
}

那么如何在OC那边执行完之后调用lua的回调呢?可以看下面代码,比如我们将GameCenter登录后的playerId作为参数再回传给lua这边

cocos2d::LuaValueDict item;
item["code"] = cocos2d::LuaValue::stringValue("succeed");
item["playerId"] = cocos2d::LuaValue::stringValue([[GKLocalPlayer localPlayer].playerID cStringUsingEncoding:NSUTF8StringEncoding]);
cocos2d::LuaBridge::pushLuaFunctionById(loginListener);
cocos2d::LuaBridge::getStack()->pushLuaValueDict(item);
cocos2d::LuaBridge::getStack()->executeFunction(1);

其中pushLuaFunctionById里传入的loginListener就是在 调用的login时从数据字典中取出的回调函数。最后再通过

cocos2d::LuaBridge::getStack()->executeFunction(1);

这句来执行回调lua的函数。

比如我回调的是lua里面的onLoginResult函数。里面的result参数就可以取到之前从OC那边传过来的数据了

function LoginScene:onLoginResult(result)
code = result.code
playerId = result.playerId
end

这样我们就完成了通过接入GameCenter后将GameCenter的参数传入给我们游戏自身的处理。之后再用这些参数做连接自身游戏服务端的具体登录,由于不同游戏的需求不同,就不继续说了。

以上。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息