文档章节

使用quick-cocos-x接入GameCenter

习惯了幻想
 习惯了幻想
发布于 2015/12/09 15:05
字数 949
阅读 380
收藏 2

注:本人使用的是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的参数传入给我们游戏自身的处理。之后再用这些参数做连接自身游戏服务端的具体登录,由于不同游戏的需求不同,就不继续说了。

以上。


© 著作权归作者所有

习惯了幻想
粉丝 6
博文 15
码字总数 7389
作品 0
朝阳
高级程序员
私信 提问
加载中

评论(4)

习惯了幻想
习惯了幻想 博主

引用来自“cying”的评论

😂 你这头像一看就知道是谁
你这id我一看也就知道是谁。。。😂
c
cying
😂 你这头像一看就知道是谁
习惯了幻想
习惯了幻想 博主

引用来自“zhouhongpeng151”的评论

哎 太不详细了 ,没头没脑 ,
哦?那请兄台整理一份更详细的资料,我也好学习学习
zhouhongpeng151
zhouhongpeng151
哎 太不详细了 ,没头没脑 ,
iMeteOra/cocos2d-x-qt

cocos2d-x-3.0alpha 中看到了Qt后端支持, 把它的.pro收纳囊肿! 其它的, 看有啥可以借鉴的吧. quick-cocos2d-x 是一个可以让您觉得“爽快”的 cocos2d-x 的扩展版。基于 cocos2d-x,完全的跨平...

iMeteOra
2014/04/28
0
0
qcdong/XXEditor

#XXEditor XXEditor是一个cocos2d-x 2.x的UI编辑器,内部使用CocosStudio控件。使用Qt5.4.1 + quick-cocos2d-x 开发,可运行在Windows、Mac、Linux。这个项目是QCEditor的2.x lua版本。希望能...

qcdong
2016/07/05
0
0
Orion/Quick-Cocos2dx-Community

Quick-Cocos2dx-Community Quick-Cocos2dx-Community 发展自用户公认的最稳定版本 Quick-Cocos2d-x v3.3。由于官方疏于维护,并表示不在发布v3.5以后的版本。原作者因为公司战略调整和所属部...

Orion
2017/02/18
0
0
Cocos 2d-x 游戏引擎全面支持 Facebook 平台

在 2014年10月28日的Cocos开发者大会上,触控科技宣布,在Facebook的协助和支持下,触控科技对旗下开源引擎Cocos 2d-x进行了更新,正式启动对Facebook平台的全面支持。今后,Cocos 2d-x的开发...

oschina
2014/10/29
1K
1
Cocos与AdColony双强携手 开通游戏广告变现直通车

Cocos与AdColony双强携手 开通游戏广告变现直通车 2018-07-20 17:25编辑: suiling分类:业界动态来源:CocoaChina CocosAdColony恰逢其时- 2018 CJ酒会 招聘信息: iOS开发 iOS开发 iOS开发...

suiling
2018/07/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring使用ThreadPoolTaskExecutor自定义线程池及实现异步调用

多线程一直是工作或面试过程中的高频知识点,今天给大家分享一下使用 ThreadPoolTaskExecutor 来自定义线程池和实现异步调用多线程。 一、ThreadPoolTaskExecutor 本文采用 Executors 的工厂...

CREATE_17
今天
5
0
CSS盒子模型

CSS盒子模型 组成: content --> padding --> border --> margin 像现实生活中的快递: 物品 --> 填充物 --> 包装盒 --> 盒子与盒子之间的间距 content :width、height组成的 内容区域 padd......

studywin
今天
7
0
修复Win10下开始菜单、设置等系统软件无法打开的问题

因为各种各样的原因导致系统文件丢失、损坏、被修改,而造成win10的开始菜单、设置等系统软件无法打开的情况,可以尝试如下方法解决 此方法只在部分情况下有效,但值得一试 用Windows键+R打开...

locbytes
昨天
8
0
jquery 添加和删除节点

本文转载于:专业的前端网站➺jquery 添加和删除节点 // 增加一个三和一节点function addPanel() { // var newPanel = $('.my-panel').clone(true) var newPanel = $(".triple-panel-con......

前端老手
昨天
8
0
一、Django基础

一、web框架分类和wsgiref模块使用介绍 web框架的本质 socket服务端 与 浏览器的通信 socket服务端功能划分: 负责与浏览器收发消息(socket通信) --> wsgiref/uWsgi/gunicorn... 根据用户访问...

ZeroBit
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部