zoukankan      html  css  js  c++  java
  • MAC 下将libpomelo连接到cocos2d-x


    摘要:借助GYP将libpomelo连接到Cocos2d-x项目并使项目能与服务端成功连接。
    配置:OS X 10.9.4 + Xcode 6.0 + Cocos2d-x-3.2


    一、部署GYP(Generate Your Projets)

    1、下载GYP项目

    终端转到要安装GYP项目的目录后,执行如下命令:

    $ svn checkout http://gyp.googlecode.com/svn/trunk/ gyp-read-only
    

    也可以使用云盘下载(2014-06-15)

    2、打开终端切换至root权限

    $ sudo -i
    

    回车后需要输入本机用户密码(就是电脑登陆密码)。输入时不会有视觉反馈(不会显示出星号)。

    3、进入GYP项目目录进行setup

    $ ./setup.py install
    

    二、部署libpomelo

    1、下载libpomelo项目。

    $ git clone https://github.com/NetEase/libpomelo.git
    

    也可以使用云盘下载(2014-06-15)

    2、生成libpomelo的Xcode项目。

    • 编译Mac端
    $ ./pomelo_gyp 
    $ xcodebuild -project pomelo.xcodeproj
    
    • 编译iOS端
    $ ./pomelo_gyp -DTO=ios
    $ ./build_ios
    
    • 编译iOS模拟器端
    $ ./pomelo_gyp -DTO=ios
    $ ./build_iossim
    

    可能出现的错误

    Q | 错误提示

    xcodebuild: error: SDK "iphonesimulator6.1" cannot be located.  
    

    A | 解决方法
    打开build_iossim文件,将模拟器版本改为所需版本。


    3、编译运行libpomelo的Xcode项目。

    打开生成的pomelo.xcodeproj文件,编译运行。

    4、打包静态库文件

    对libpomelo进行编译后会产生几个静态库文件。如果想要同时针对多平台进行开发,那么可以将针对不同平台的同名静态库文件打包在一起。

    编译所生成的静态库文件有以下三种,分别放在如下文件夹的子文件夹中:

    • libpomelo->build下的libpomelo.a
    • libpomelo->deps->jansson->build下的libjansson.a
    • libpomelo->deps->uv->build下的libuv.a

    例如文件libpomelo.a所处的目录结构如下
    此处输入图片的描述

    通过如下命令可以将图片中蓝色选中的两个文件合并打包到新的路径下。

    $ lipo -create [filePath1] [filePath2] -output [pathOfNewFile]
    

    静态库文件打包后的效果如下图:
    打包后的效果

    5、对libpomelo删繁就简。

    在项目中新建一个lib文件夹,将合成的静态库文件统一放进去。对于项目的其他部分,只需保留如下的几个文件夹文件:

    • libpomelo->include
    • libpomelo->deps->jansson->src
    • libpomelo->deps->uv->include

    处理后的目录结构示例如下:
    删繁就简后的libpomelo目录结构

    三、将静态库导入Cocos2d-x项目

    1、创建一个Cocos2d-x项目

    Cocos2d-x项目的创建参考Mac下搭建Cocos2d-x-3.2的开发环境

    2、将libpomelo添加到Cocos2d-x项目中

    在XCode中右击项目,Add Files to “XXX”,按下图添加libpomelo文件夹:
    libpomelo项目文件添加到Cocos2d-x项目

    3、添加静态库文件

    点击项目的Target,选择Build Phases选项卡,找到Link Binary With Libraries
    路径

    点击+,点击Add Other…
    静态库的位置

    将导入的libpomelo项目中三个静态文件添加进去。
    添加静态库文件

    4、添加头文件搜索路径

    切换到Build Settings选项卡,找到Search Paths条目,在User Header Search PathsLibrary Search Paths中分别加入3项,分别是libpomelo文件夹下includedeps->jansson->srcdeps->uv->include这三个文件夹的绝对路径。

    可以采用相对路径的方式添加,将以下三行加入``即可:

    ${PROJECT_DIR}/libpomelo/include
    ${PROJECT_DIR}/libpomelo/deps/uv/include
    ${PROJECT_DIR}/libpomelo/deps/jansson/src
    

    ${PROJECT_DIR}是Xcode提供的环境变量,代表项目所在路径。

    Tip:为了获取文件夹的绝对路径,先将项目中的文件夹用Finder打开,再将文件夹拖动到终端,即可。

    5、添加库文件搜索路径

    同样在Search Paths条目中,找到Library Search Paths项,加入上述三个路径。

    四、验证

    在项目中添加一段代码来验证libpomelo已经安装成功。本例所使用的服务器端为chatofpomelo-websocket

    1、运行服务器端

    1)下载chatofpomelo-websocket

    $ git clone https://github.com/NetEase/chatofpomelo-websocket.git
    

    2)安装依赖项

    $ sh npm-install.sh
    

    3)运行game-server

    在终端进入chatofpomelo-websocket项目下的game-server文件夹。执行:

    $ node app
    

    2、运行客户端

    1)添加头文件

    HelloWorldScene.cpp文件中添加头文件

    #include "pomelo.h"
    

    2)添加测试代码

    init()函数中添加如下代码

    /*向服务器请求连接*/
    
    const char * ip = "127.0.0.1";
    int port = 3014; //服务器端chatofpomelo-websocket为客户端提供的连接端口号。
    
    pc_client_t * pClient = pc_client_new();
    struct sockaddr_in address;
    
    memset(&address,0,sizeof(struct sockaddr_in));
    
    address.sin_family = AF_INET;
    address.sin_port = htons(port);
    address.sin_addr.s_addr = inet_addr(ip);
    
    if (pc_client_connect(pClient, &address))
    {
        CCLOGINFO("***** Connection Failed! *****");
        pc_client_destroy(pClient);
    }
    else
    {
        CCLOGINFO("***** Connection Succeed! *****");
        pc_client_destroy(pClient);
    }
    
    

    代码可参考pomelo客户端开发

    3)编译运行项目

    若运行项目后在output中输出cocos2d: ***** Connection Succeed! *****,说明libpomelo配置成功。


    可能出现的错误

    Q | 错误提示

    Undefined symbols for architecture x86_64:
    "_FSEventStreamCreate", 
    referenced from:_uv__fsevents_init in libuv.a(fsevents.o)
    "_FSEventStreamInvalidate", 
    referenced from:  _uv__fsevents_close in libuv.a(fsevents.o)
    "_FSEventStreamRelease", 
    referenced from:  _uv__fsevents_close in libuv.a(fsevents.o)  
    "_FSEventStreamScheduleWithRunLoop", 
    referenced from: _uv__fsevents_schedule in libuv.a(fsevents.o)  
    "_FSEventStreamStart", 
    referenced from: _uv__fsevents_schedule in libuv.a(fsevents.o)  
    "_FSEventStreamStop", 
    referenced from: _uv__fsevents_close in libuv.a(fsevents.o)
    
    ld: symbol(s) not found for architecture x86_64 
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    

    A | 解决方法

    • 针对Mac,在Build Settings选项中的Linking条目下的Other Linker Flags中添加
    -framework CoreFoundation 
    -framework CoreServices
    
    • 针对iOS,不需要添加上述Flags。

    参考源:Libraries to compile libuv on os x?


    五、参考链接

    1、Mac下编译libpomelo静态库,并在cocos2dx项目中引用:讲解十分详细,图文丰富。

    2、libpomelo官方README文档:有较大参考价值。

    3、pomelo客户端开发:同样属于官方文档,是链接2的中文版。

    4、Mac下cocos2d-x连接pomelo服务器:写得比较简洁,把必要的部分都写进去了。

    5、迁移到MAC:如果有些意外情况可尝试参考,该文价值量较低。

    6、手把手教你把pomelo客户端组件libpomelo加入Cocos2d-x 3.0项目(Windows、Android、iOS平台):官方文档,添加组件的另一种方式,相对比较繁琐。


    完稿于2014/9/23。

    原文链接:http://www.cnblogs.com/tangyikejun/p/3988724.html




    知识共享许可协议
    作者:tangyikejun
    本文采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

  • 相关阅读:
    Spring事件机制
    设计模式(07)——设计原则(2)
    设计模式(06)——设计原则(1)
    使用Feign发送HTTP请求
    设计模式(05)——组合和继承
    设计模式(04):接口和抽象类
    设计模式(03):面向对象与面向过程的区别与联系
    设计模式(二):面向对象及其特性分析
    设计模式(一):学习大纲
    Java8日期时间——LocalDateTime的使用以及相互转换
  • 原文地址:https://www.cnblogs.com/tangyikejun/p/3988724.html
Copyright © 2011-2022 走看看