如何使用cocos2d x lua apiconsole创建,编译,运行一个Lua工程

7049人阅读
1. 准备工作
(1)VS2012
(2)cocos2dx&
(3)python 新版本的cocos2dx 需要python编译
2. 安装软件
(1)VS2012 从官网下载并安装
(2)python 安装:下载地址:&&&
(3)cocos2dx 安装
① 解压下载的cocos2dx ,我下载的版本cocos2dx 3.2
②然后进入D:\cocosDevelop\cocos2d-x-3.2\cocos2d-x-3.2\build,打开cocos2d-win32.vs2012.sln文件,将cpp-tests设为启动项(右击cpp-tests,设置为项目启动项),点击run。
③编译工作完成后就能看到,官方的demo。
3.HelloWorld
(1)创建新项目命令cocos
使用cmd作为你的shell:进入D:\cocosDevelop\cocos2d-x-3.2\cocos2d-x-3.2\tools\cocos2d-console\bin,然后执行类似的命令:cocos.py new YourGameTitle -p com.yourcompany.gametitle -l cpp -d C:\YourGameTitle 。
当然不想每次都这么麻烦,想要直接使用cocos命令,则需要配置环境变量。只需要进入D:\cocosDevelop\cocos2d-x-3.2\cocos2d-x-3.2 执行setup.py ,就会帮助我们设置cocos2d-x运行所需要的环境变量。(注:setup.py会检测android运行环境,所以先不用理会里面的信息,直接回车。)
(2)cocos命令介绍&
cocos new [-h] [-p PACKAGE_NAME] -l {cpp,lua,js} [-d DIRECTORY]
& & & & & & & & &[-t TEMPLATE_NAME] [--ios-bundleid IOS_BUNDLEID]
& & & & & & & & &[--mac-bundleid MAC_BUNDLEID] [--no-native]
& & & & & & & & &[PROJECT_NAME]
-h:显示 cocosnew 命令的帮助信息,该信息包含了 cocosnew 命令中每个命令行
参数的含义(英文描述)。
-p:包名(PACKAGE_NAME)。主要用于 Android 工程。如果不指定该命令行参数,
默认值是 org.cocos2dx.hellocpp。
-l:表示 Cocos2d-x 工程使用的语言,该命令行参数后只能跟 cpp、lua 和 js 中的一
个, cpp 表示 C++语言,lua 表示 Lua 语言,js 表示 Javascript 语言。该命令行参数
必须指定。
-d:Cocos2d-x 工程所在的目录。cocos new 命令会将 Cocos2d-x 工程放到该目录中。
如果不指定该命令行参数,默认为当前目录。
-t:模板名称。如果不指定该命令行参数,cocos new 命令会使用默认的模板。
Cocos2d-x 中用于建立工程的模板都在&Cocos2d-x 根目录&/templates 目录中。其中
cpp-template-default 目录是建立 C++ 工程的模板, lua-template-default 和
lua-template-runtime 目录是建立 Lua 工程的模板,以“-default”结尾的是模板模
板,其中 default 和 runtime 是模板名称。也就是-t 命令行参数后面要跟的内容。
如果有一个 cpp-template-abcd目录,那么使用该模板的命令行参数应为“-t
--no-native:该命令行参数只用于 Lua 和 Javascript 工程,表示没有本地支持。
(3)创建HelloWorld cocos new HelloWorld -p com.cocos2dx.org -l cpp -d d:/androidCocos
(4)如何设置应用运行窗口的大小
找到项目中Classes文件夹中的AppDelegate.cpp ,加入代码&glview-&setFrameSize(640,940);
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:73788次
积分:1329
积分:1329
排名:第14931名
原创:61篇
评论:12条
(1)(5)(2)(4)(5)(13)(1)(1)(5)(1)(2)(17)(6)(1)【cocos2d-x】3.0利用cocos-console创建,编译,部署游戏 - 推酷
【cocos2d-x】3.0利用cocos-console创建,编译,部署游戏
原文地址:
cocos2d-x 3.0开始增加了一个cocos-console组件,它位于cocos2d-x 3.0的tools下面。
它能够创建,编译和部署cocos2d-x的游戏。下面让我们来看看它到底是怎么使用的勒!
首先需要安装一些依赖环境,python 2.7 ,vs2012,android sdk ,android ndk,apache ant & &(mac和window各司平台)
1、将cocos2d-x 3.0解压,进入目录,运行setup.py (window双击,linux 和 mac ./setup.py)
2、终端会提示需要配置哪些配置项。依据提示配好即可。例如 ANDROID_SDK_ROOT 在 环境变量里面将此参数加上配置android sdk的根目录。
3、在终端目录运行cocos --help
Available commands:
Compiles the current project to binary
Creates a new project
Compiles & deploy project and then runs it on the target
minifies and/or compiles js files
Deploy a project to the target
从help命令就知道,cocos console能够进行编译,新建,运行,部署游戏。
4、new 创建游戏工程,运行 cocos new -h
usage: cocos new [-h] [-p PACKAGE_NAME] -l {cpp,lua,js} [-d DIRECTORY]
[-t TEMPLATE_NAME] [--no-native]
[PROJECT_NAME]
Creates a new project
positional arguments:
PROJECT_NAME
Set the project name
optional arguments:
-h, --help
show this help message and exit
-p PACKAGE_NAME, --package PACKAGE_NAME
Set a package name for project
-l {cpp,lua,js}, --language {cpp,lua,js}
Major programming language you want to use, should be
[cpp | lua | js]
-d DIRECTORY, --directory DIRECTORY
Set generate project directory for project
-t TEMPLATE_NAME, --template TEMPLATE_NAME
Set the template name you want create from
lua/js project arguments:
--no-native
No native support.
能够看到详细的帮助信息,比如我现在想在e:\mygame下创建一个myGames的游戏,android包为com.test.mygames,我就可以用命令:cocos new -p com.test.mygames -l cpp -d e:\mygame myGames
5、拓展其他命令依次用-h就能够知道用法。
cocos这是一个GUI的棋,先用命令行全部实现了,然后再用GUI进行封装即可可视化创建编译等一系列动作了,可我们在历史的进行中,还是得用命令行来搞定啊!!
已发表评论数()
&&登&&&陆&&
已收藏到推刊!
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见【cocos2d-x + Lua(1) 绑定Lua并使用tolua++】 - zisouTags - 博客园
为什么要使用Lua进行游戏开发?
上面一个问题我觉得在我们使用Lua之前需要深入思考的,Lua有何优点?缺点又是什么?先找准自己的项目定位
在什么时候使用是很必要的;
经过自己一番摸索之后有如下结论:
1,嵌入式脚本开发可以跳过平台市场进行独立的游戏资源更新;
2,在使用Lua开发能降低在使用C++中得指针引用报错,nil类型问题;
3,可以使用Lua表结构来完成面向对象;
还有一个项目定位的问题,那就是开发游戏,用全Lua,还是C++绑定Lua呢?
如果使用全Lua,我建议完全使用Cocos2d-x触控官方收购了成都的Quick-Cocos2dx!用Quick开发优势就一个
字!快!官方提供的框架(quicklua包)目前是2.2版本(3.0以后也会同步),以后我会补上配置Quick开发的环境;
C++绑定Lua:
在项目定位中,只有一部分模块(活动等)需要使用Lua开发,那就必须半路出家,从中途绑定上Lua,进行C++和
Lua的交叉开发,这种绑定开发是比较流行的,因为C++能利用Lua的优势实现自更新,Lua也能依赖C++借助它的
底层开发能力完成相对复杂的开发;
上面对Lua的使用做了个概述,下面直接进行重要环节了,将会在xcode和eclipse上实现cocos2dx+lua!
本篇可能有点长,自带小板凳,瓜子观看;
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
使用版本Cocos2dx2.2版本,
Xcode中手动绑定 Cocos2dx+lua:
1,首先新建一个cocos2dx新工程,怎么建都可以,最终能再Xcode运行起来都行;
2,新建好后在libs文件夹下面添加Lua的libs包;
这个是我用xcode新建出来的Lua项目,里面自带了一个包Lua文件夹;
也可以使用cocos2dx自带:
对比后发现用了4个目录,cocos2dx_support,lua,luajit,tolua
3,添加完成之后点Run会报错,是因为缺少CocoStudio这个库,如果你项目以后要使用CocoStudio那就再把库导进来,如果不用
那就直接注释掉CocoStudio相关的就可以跑起来了!
4,OK跑起来之后,我们就可以使用Lua脚本了,我们先简单写一个测试的(功能为在C++加载一个CClayer,CClayer中有一个
背景精灵图片)
(一)首先我们需要先把lua脚本代码写出来
testlua.lua
-- for CCLuaEngine traceback
function __G__TRACKBACK__(msg)
print("----------------------------------------")
print("LUA ERROR: " .. tostring(msg) .. "\n")
print(debug.traceback())
print("----------------------------------------")
local function main()
-- avoid memory leak
collectgarbage("setpause", 100)
collectgarbage("setstepmul", 5000)
local cclog = function(...)
print(string.format(...))
local visibleSize = CCDirector:sharedDirector():getVisibleSize()
local origin = CCDirector:sharedDirector():getVisibleOrigin()
local function createLayerMap()
local layerWroldMap = CCLayer:create()
local bg = CCSprite:create("luaimg/bd.jpg")
bg:setPosition(origin.x + visibleSize.width / 2 + 80, origin.y + visibleSize.height / 2)
layerWroldMap:addChild(bg,1)
return layerWroldMap
CCDirector:sharedDirector():getRunningScene():addChild(createLayerMap(),3,1)
xpcall(main, __G__TRACKBACK__)
如果你有一些编程经验,学习lua,js这种脚本语言是很轻松的,去网上下载Lua教程可以先了解一下!
(二)在之前我已经写了一个单例方法使用的PublicLuaTodo类,主要就是引用官方给我们提供的CCLuaEngine(Lua支持引擎)
这是一个在cocos2dx中操作Lua的中间件工具类,我已经封装好了,怎么去使用Lua的方法;
下面我直接贴代码:
PublicLuaTodo.h
#include "cocos2d.h"
#include "script_support/CCScriptSupport.h"
#include "../../../lua/cocos2dx_support/CCLuaEngine.h"
#include &string&
USING_NS_CC;
class PublicLuaTodo:public CCObject
PublicLuaTodo(void);
~PublicLuaTodo(void);
static PublicLuaTodo* getInstance();
//执行lua文件
static void toDoLuaFile(string luapath);
//执行lua语句
static void toDoLuaString(string luastring);
//执行一个lua全局的方法
static void toDoLuaGlobalFunction(string founctionname);
static PublicLuaTodo* m_
PublicLuaTodo.cpp
#include "PublicLuaTodo.h"
CCLuaEngine* pE
PublicLuaTodo* PublicLuaTodo::m_instance = NULL;
PublicLuaTodo* PublicLuaTodo::getInstance()
if(!m_instance)
m_instance = new PublicLuaTodo();
PublicLuaTodo::PublicLuaTodo()
pEngine = CCLuaEngine::defaultEngine();
CCScriptEngineManager::sharedManager()-&setScriptEngine(pEngine);
void PublicLuaTodo::toDoLuaFile(string luapath)
std::string path = CCFileUtils::sharedFileUtils()-&fullPathForFilename(luapath.c_str());
pEngine-&executeScriptFile(path.c_str());
void PublicLuaTodo::toDoLuaString(string luastring)
pEngine-&executeString(luastring.c_str());
void PublicLuaTodo::toDoLuaGlobalFunction(string founctionname)
pEngine-&executeGlobalFunction(founctionname.c_str());
PublicLuaTodo::~PublicLuaTodo(void)
if(!pEngine)
pEngine=NULL;
上图是我工程全部准备好的结构;
(三)执行我们已经运写好的Lua文件:
string luafile = "test/test.lua";
PublicLuaTodo::getInstance()-&toDoLuaFile(luafile);
我把上段代码写到了helloapp里面的关闭方法中, 很方便就能运行起来Lua新加的层!
5,使用toLua++ 工具类实现在Lua中调用C++方法
(一)在工程中我还引入了一个做适配的类VisbleRect.h是C++写的,主要作用是获取屏幕各个方向上的坐标,
方便使用适配后的坐标点。要使用这个类cocos2dx提供了工具tolua方法,原理就是通这tolua++IPA调用通过
自己创建的XX.pkg文件,生成出对应供lua调用的类LuaCocos2d.cpp接口,lua能对应寻找对应方法在Lua中
(二)编写需要调用的XX.pkg文件:
定位到:/Users/youmacname/cocos2dx.2.2/cocos2d-x-2.2/tools/tolua++ 中,并在该目录下编写VisbleRect.pkg文件
编写规则参见README翻译如下:    1) enum keeps the same&&& 2) remove CC_DLL for the class defines, pay attention to multi inherites&&& 3) remove inline keyword for declaration and implementation&&& 4) remove public protect and private&&& 5) remove the decalration of class member variable&&& 6) keep static keyword&&& 7) remove memeber functions that declared as private or protected
VisbleRect.pkg
class VisibleRect
static CCRect getVisibleRect();
static CCPoint left();
static CCPoint right();
static CCPoint top();
static CCPoint bottom();
static CCPoint center();
static CCPoint leftTop();
static CCPoint rightTop();
static CCPoint leftBottom();
static CCPoint rightBottom();
(三)修改/cocos2dx.2.2/cocos2d-x-2.2/tools/tolua++ 中的Cocos2d.pkg,添加$pfile "VisibleRect.pkg"这一行
(四)继续修改如下路径:
定位到:/cocos2dx.2.2/cocos2d-x-2.2/tools/tolua++/下
Makefile文件
Cocos2d.pkg文件
修改成你自己想生成的路径
(五)打开终端运行./build.sh ,编译生成新的带接口的LuaCocos2d.cpp
(六)将新生成的LuaCocos2d.cpp复制到我们工程目录下
对应工程目录
/Users/youmacname/myluatest/myluatest/libs/lua/cocos2dx_support/
替换掉原有的LuaCocos2d.cpp
(七)这时直接xcodex运行run会报错,需要在工程里面LuaCocos2d.cpp中添加VisbleRect.h头文件的路径。
#include "/Users/youmacname/myluatest/myluatest/Classes/VisibleRect.h"
再点Run就不会报错了,到这一步应该也了解了整个Cococs2dx运行Lua的原理和机制!
恭喜你可以使用VisibleRect里面所提供的静态方法了!意味着Lua也可以调用C++了!!
我们来实际在Lua中操作一下
修改test.lua
-- for CCLuaEngine traceback
function __G__TRACKBACK__(msg)
print("----------------------------------------")
print("LUA ERROR: " .. tostring(msg) .. "\n")
print(debug.traceback())
print("----------------------------------------")
local function main()
-- avoid memory leak
collectgarbage("setpause", 100)
collectgarbage("setstepmul", 5000)
local cclog = function(...)
print(string.format(...))
--local visibleSize = CCDirector:sharedDirector():getVisibleSize()
--local origin = CCDirector:sharedDirector():getVisibleOrigin()
local function createLayerMap()
local layerWroldMap = CCLayer:create()
local bg = CCSprite:create("luaimg/bd.jpg")
--bg:setPosition(origin.x + visibleSize.width / 2 + 80, origin.y + visibleSize.height / 2)
bg:setPosition(VisibleRect:center())
layerWroldMap:addChild(bg,1)
return layerWroldMap
CCDirector:sharedDirector():getRunningScene():addChild(createLayerMap(),3,1)
xpcall(main, __G__TRACKBACK__)
OK,改完之后Run一下
到现在为止我们已经完成了在xcode上面绑lua并使用tolua++调用C++的方法!
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Android 上面绑Lua
如果你没有配置过mac上的android环境,那么请看这篇
1,同样也是先创建一个新工程;
&./create_project.py -project XXX-package com.xxx.XXX -language cpp
2,将刚才我们在xcode上写的东西新加的类都移植(复制对应目录就行),并编写对应的.mk文件
3,工程可能会报错,先导入libPluginPrptocol Cocos2dx提供的扩展包
/Users/youmacname/cocos2dx.2.2/cocos2d-x-2.2/plugin/protocols
右键myluatest 工程-&Android-&library -&add libPluginPrptocol进来
4,这步是重要环节,也是理解android工程中绑lua是如何工作的!
按照上图,我们需要对应添加
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_lua_static
lua静态库和我们需要lua单独的.so& android工程
$(call import-module,scripting/lua/proj.android)
OK,现在我们run一下会报错!!和在xcodex上面是一样的原因!我们还得替换掉原有的LuaCocos2d.cpp!
android& $(call import-module,scripting/lua/proj.android) 的真实路径如下:
/Users/youmacname/cocos2dx.2.2/cocos2dx2.2/scripting/lua/cocos2dx_support/
我们需要将LuaCocos2d.cpp替换掉/Users/youmacname/cocos2dx.2.2/cocos2dx2.2/scripting/lua/cocos2dx_support/
下面的LuaCocos2d.cpp
并且和IOS一样还要修改里面的路径,此时路径应该填andriod下面的,可以填绝对路径!
以上步骤完成就可以点android Run了!!
成功生成了.so文件,标志着android也运行起来了!
以上就是android& 工程中手动绑定并使用tolua++内容!
这篇文章确实有点长,希望对大家有用!Lua下一篇我会说一下如何C++和Lua数据传值,互调方法等我已经处理好的类库;
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
本章Xcode源码地址:
cocos2dxQQ交流群:

我要回帖

更多关于 cocos2d x lua json 的文章

 

随机推荐