标签(空格分隔): iOS
本文所用各版本信息: Xcode9.2 + swift4版本 cocos2d-x v3.17 中文官方网站
首先网上给出一个C系的思路,本人未亲测,并且以C调用lua,绕过了cocos2d-x的调用思路,不觉得这种方式很好,所以弃之;
本文思路如图:

ViewController展现就可以了;并且lua脚本可以像资源添加的方式直接在文件夹中替换,非常方便;基于以上思路,说干就干;
新建一个swift语言写的工程,我们默认你已经会用Xcode做这件事了,于是,工程的结构先大致看一下;
这里是我自己的swift工程,上面的是总结构,下面的是内部工程结构,我们这里只关注一下bridge,首先创建一个CocosViewController的控制器,这里的控制器可以是OC类型的,也可以使用swift类型的(由于我们需要用OC做桥接文件,所以需要我们创建一个OC的类,我这里自己写了一个单例用来做桥接,所以控制器就无所谓是OC还是swift了),用来呈现我们用cocos2dx-lua展现的游戏页面;在swift工程中添加OC文件会自动生成桥接文件,名字如图;另外还需要注意一点,CocosViewController的.m文件要修改成.mm类型,这样就可以在实现中直接调用C++的类了;
创建好后先不要动,我们再来创建一个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上面出现的CocosLua是一个c++的类,在工程中自己创建的;创建它的目的是用来封装cocos2dx-lua的操作,这个类直接被隐藏在LuaBridge单例中,在实际应用过程中可能用的不是很多,我们这里出现它只是为了说明本文的类型结构;
#ifndef CocosLua_hpp
#define CocosLua_hpp
#include <iostream>
class CocosLua {
    
public:
    CocosLua();
    ~CocosLua();
    
public:
    void cocos_lua();
};
#endif /* CocosLua_hpp */首先我们需要去cocos官网上下载cocos2dx源码,链接在本文开始,我自己下载的是v3.17版本,下载的是zip包,解压后如下图:
接下来打开终端,我们创建一个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> 项目创建路径
$ ./cocos new Nothing-lua -p com.charles.nothing -l lua -d /Users/dizi/Desktop
如果你做到这一步,那么我们离成功不远了;接下来我们要把lua项目里的资源拷贝到swift项目中,具体跟着我一步一步做;
- 
把lua项目下 frameworks/cocos2d-x文件夹拖动到swift目录下:这里说一点,如果工程是用git管理,因为cocos2d-x下文件比较多,而且是cocos2dx代码文件,所以不必要上传,可添加.gitignore文件: 
- 
在swift项目目录下新建 Resources文件夹,将lua项目中的如图三项拷贝进该文件夹下,这样以后lua的所有资源则将全部在该目录下替换,不需要修改工程中其他地方:
- 
将刚刚添加的文件引用到工程项目中: 注意我们的coco2d-x目录并不需要一并引入到工程中,我们不会用到它(不引用它并不说不会用到,不要删掉,不要删掉,不要删掉!!!); PS:这里注意蓝色文件夹和黄色文件夹的区别; 
接下来到了重头戏,工程环境配置,这个部分我们需要耐心一点,因为有很多路径需要我们自己去找,还要搞清楚几个不同的工程项目配置,我们一步一步来;
- 
接下来配置资源库,点击工程TARGETS->Build Phases,在Target Dependencies中添加: 在Link Binary With Libraries中添加如下支持库,其中lib文件需要打开Add other添加,按shift + command + G,在其中输入 /usr/lib;
- 
cocos2dx不支持bitcode,在buildsetting中 Enable Bitcode改为NO;C++编译器部分: 
- 
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工程配置中,确保以下架构都支持;

cocos2d_lua_bindings.xcodeproj工程配置中,确保以下支持平台为iOS;























