本文所用各版本信息:
Xcode9.2 + swift4版本
cocos2d-x v3.17 中文官方網(wǎng)站
集成思路
首先網(wǎng)上給出一個C系的思路,本人未親測,并且以C調(diào)用lua,繞過了cocos2d-x的調(diào)用思路,不覺得這種方式很好,所以棄之;

本文思路如圖:

首先swift與objective-c的互相調(diào)用非常方便,其次oc只需要將.m文件寫成.mm就可以在實現(xiàn)中直接調(diào)用c++方法,并且c++可以直接綁定lua,這樣一來,就實現(xiàn)了,ios系語言寫主框架,lua寫游戲邏輯,直接通過
ViewController展現(xiàn)就可以了;并且lua腳本可以像資源添加的方式直接在文件夾中替換,非常方便;基于以上思路,說干就干;
首先你需要一個swift項目
新建一個swift語言寫的工程,我們默認你已經(jīng)會用Xcode做這件事了,于是,工程的結(jié)構(gòu)先大致看一下;


這里是我自己的swift工程,上面的是總結(jié)構(gòu),下面的是內(nèi)部工程結(jié)構(gòu),我們這里只關(guān)注一下bridge,首先創(chuàng)建一個CocosViewController的控制器,這里的控制器可以是OC類型的,也可以使用swift類型的(由于我們需要用OC做橋接文件,所以需要我們創(chuàng)建一個OC的類,我這里自己寫了一個單例用來做橋接,所以控制器就無所謂是OC還是swift了),用來呈現(xiàn)我們用cocos2dx-lua展現(xiàn)的游戲頁面;在swift工程中添加OC文件會自動生成橋接文件,名字如圖;另外還需要注意一點,CocosViewController的.m文件要修改成.mm類型,這樣就可以在實現(xiàn)中直接調(diào)用C++的類了;
創(chuàng)建好后先不要動,我們再來創(chuàng)建一個OC類型的單例,用來進行引擎的初始化操作,以及對lua游戲操作進行封裝,我自己命名為LuaBridge;

#import "LuaBridge.h"
#include "CocosLua.hpp"
@interface LuaBridge()
{
CocosLua _cocosLua;
}
@end
@implementation LuaBridge
- (instancetype)init
{
self = [super init];
if (self) {
_cocosLua = CocosLua();
}
return self;
}
static LuaBridge* _bridge = nil;
+ (instancetype)shared {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_bridge = [[LuaBridge alloc] init];
});
return _bridge;
}
@end
上面出現(xiàn)的CocosLua是一個c++的類,在工程中自己創(chuàng)建的;創(chuàng)建它的目的是用來封裝cocos2dx-lua的操作,這個類直接被隱藏在LuaBridge單例中,在實際應(yīng)用過程中可能用的不是很多,我們這里出現(xiàn)它只是為了說明本文的類型結(jié)構(gòu);
#ifndef CocosLua_hpp
#define CocosLua_hpp
#include <iostream>
class CocosLua {
public:
CocosLua();
~CocosLua();
public:
void cocos_lua();
};
#endif /* CocosLua_hpp */
創(chuàng)建一個cocos2dx-lua項目
首先我們需要去cocos官網(wǎng)上下載cocos2dx源碼,鏈接在本文開始,我自己下載的是v3.17版本,下載的是zip包,解壓后如下圖:

接下來打開終端,我們創(chuàng)建一個lua項目;

一路cd到我們下載的cocos2dx文件夾下,然后:
$ cd tools/cocos2d-console/bin/
到上面的這個目錄下新建工程,使用下面的命令格式:
cocos new <game name> -p <package identifier> -l <language> -d <location>
<game name> 工程名
<package identifier> 包名,bundle id
<language> 所用語言 cpp lua js
<location> 項目創(chuàng)建路徑
$ ./cocos new Nothing-lua -p com.charles.nothing -l lua -d /Users/dizi/Desktop


整合swift項目與lua項目
如果你做到這一步,那么我們離成功不遠了;接下來我們要把lua項目里的資源拷貝到swift項目中,具體跟著我一步一步做;
-
把lua項目下
frameworks/cocos2d-x文件夾拖動到swift目錄下:
image_1cf2ni2nnkpq1pmrsbd1iippri55.png-160.2kB
這里說一點,如果工程是用git管理,因為cocos2d-x下文件比較多,而且是cocos2dx代碼文件,所以不必要上傳,可添加.gitignore文件:
image_1cf2o45re1ahs1lvjn8mca14be5i.png-16.3kB -
把lua項目下
frameworks/runtime-src/Classes文件夾拖動到swift目錄下:
image_1cf2o6cm9rhe1tj416tl1acf8285v.png-197.8kB -
在swift項目目錄下新建
Resources文件夾,將lua項目中的如圖三項拷貝進該文件夾下,這樣以后lua的所有資源則將全部在該目錄下替換,不需要修改工程中其他地方:
image_1cf2obieh1vrtujma7ucml86d6c.png-112.3kB -
將剛剛添加的文件引用到工程項目中:
image_1cf2ogs2gai2rj01e701jks1q2h79.png-75.4kB
image_1cf2pbtk51lrv1kek18me1i5brlh8j.png-68.5kB
注意我們的coco2d-x目錄并不需要一并引入到工程中,我們不會用到它(不引用它并不說不會用到,不要刪掉,不要刪掉,不要刪掉?。。。?br> PS:這里注意藍色文件夾和黃色文件夾的區(qū)別;
工程環(huán)境配置
接下來到了重頭戲,工程環(huán)境配置,這個部分我們需要耐心一點,因為有很多路徑需要我們自己去找,還要搞清楚幾個不同的工程項目配置,我們一步一步來;
-
引入工程文件,這幾個工程文件分別生成cocos-lib以及調(diào)拭用.a庫,以下依次:
image_1cf2vge2nmebc02hcgk8k1a199g.png-241.5kB
image_1cf2vjknh14co12bq15jqahuh0a9t.png-103.2kB
image_1cf2vl0kf1skll42p86qi11k16aa.png-156.1kB -
接下來配置資源庫,點擊工程TARGETS->Build Phases,在Target Dependencies中添加:
image_1cf2vs1jffgj8avof61vg11iuaan.png-85.6kB
在Link Binary With Libraries中添加如下支持庫,其中l(wèi)ib文件需要打開Add other添加,按shift + command + G,在其中輸入/usr/lib;
image_1cf304l9cja61nu71r9h1l8b539b4.png-118.7kB
image_1cf309lts1b921oan4rhvkd1svebh.png-110.7kB -
cocos2dx不支持bitcode,在buildsetting中
Enable Bitcode改為NO;
image_1cf30d889rs6173d8s411e0i5jbu.png-21.7kB
C++編譯器部分:
image_1cf30ekpb1omd1rj61m56qo1eracb.png-26.4kB Header Search Paths中添加:
$(inherited)
$(PROJECT_DIR)/cocos2d-x/cocos
$(PROJECT_DIR)/cocos2d-x/external/lua/tolua
$(PROJECT_DIR)/cocos2d-x/external/lua/lua
$(PROJECT_DIR)/cocos2d-x/external/lua
$(PROJECT_DIR)/cocos2d-x/external
$(PROJECT_DIR)/cocos2d-x/Classes

- 引入工程配置:
cocos2d_libs.xcodeproj工程配置中,確保以下架構(gòu)都支持;
image_1cf30qh2sddp1mi95kj89o1725d5.png-52.8kB
cocos2d_lua_bindings.xcodeproj工程配置中,確保以下支持平臺為iOS;
image_1cf30sk2o1211j4t88f11lt172dff.png-98.9kB - 好了,開始編譯你的工程吧!
去倒杯水吧,這個過程會很久。。。

Congratulations! 至此,工程已經(jīng)全部配置完畢,你已經(jīng)解決一個大Boss了;
今天就到這里吧,之后我們再續(xù)如何用swift調(diào)用lua 手把手教你swift項目添加cocos2dx-lua(2)