摘要:藉助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
處理後的目錄結構示例如下:
三、將靜態庫導入Cocos2d-x項目
1、創建一個Cocos2d-x項目
Cocos2d-x項目的創建參考Mac下搭建Cocos2d-x-3.2的開發環境。
2、將libpomelo添加到Cocos2d-x項目中
在XCode中右擊項目,Add
Files to “XXX”
,按下圖添加libpomelo
文件夾:
3、添加靜態庫文件
點擊項目的Target
,選擇Build
Phases
選項卡,找到Link Binary With Libraries
,
點擊+
,點擊Add
Other…
,
將導入的libpomelo項目中三個靜態文件添加進去。
4、添加頭文件搜索路徑
切換到Build
Settings
選項卡,找到Search Paths
條目,在User
Header Search Paths
和Library Search Paths
中分別加入3項,分別是libpomelo文件夾下include
,deps
->jansson
->src
和deps
->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。
五、參考鏈接
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。