`
runfeel
  • 浏览: 943766 次
文章分类
社区版块
存档分类
最新评论

【cocos2dx开发技巧6】脚本lua的使用--开发环境的配置

 
阅读更多

转发,请保持地址:http://blog.csdn.net/stalendp/article/details/8920018

在cocos2dx中使用lua进行开发的过程中,肯定会涉及到对lua功能进行扩充的情况,网络上已经有相关的文章,不过不是那么简单明了。所以我这里特意写了这篇文章,也是作为自己学习的一个总结吧。这里我将使用Eclipse来开发lua。使用eclipse开发lua,可以运用其强大的扩展能力,大大地加快开发。文章将介绍怎么定制一个工具来生成lua,并进行调用。

开发工具下载

使eclipse开发lua有两种方法: 1)安装ldt; 2)下载整合好的eclipse;

ldt的安装就不介绍了,大家可以到网上去搜索关于eclipse插件安装的教程;官方也有相应的说明:http://www.eclipse.org/koneki/ldt/#documentation

如果要安装c++相关的功能,还需要安装cdt,cdt的官方如下:http://www.eclipse.org/cdt/downloads.php


工程的创建

创建一个工程,叫luaTester; 然后编辑main.lua,运行,结果如下:


调试界面:


配置toLua++工具

在cocos2dx中开发lua,需要用到toLua++来生成文件。网上已经有相关教程,不过都不是很全面,操作也不是很方便。我在这里利用eclipse强大的工具配置功能来定制toLua++,使得开发更有效率。

点击菜单Run->External Tools -> External Tools Configurations...;弹出对话框,如下图所示:


在Program下增加一个工具,就叫luaMaker吧;配置如上图。
几点说明(假设cocos2dx的根目录为/Users/shhqw132/Documents/cocos2d-2.1rc0-x-2.1.3):
1) 在tools/tolua++目录下有tolua++工具,默认是打包的(windows打包成rar文件;mac下打包成zip文件)。根据情况减压一个到tools/tolua++下;上图中,工具的Location定位到刚刚减压缩出来的可执行文件。
2)Eclipse中内置了一些变量的地址。这里用到了${resource_loc} 这个变量,即当前选择的资源在系统中的绝对路径。
3)toLua++命令格式如下: ./toLua++ -L basic.lua -o xxx.cpp xxx.pkg ; -L:指定相应lua文件的位置(用于修改生成的cpp文件,cocos2dx中用来对tolua++生产的文件做fix); -o 指定的是生成的cpp文件的名称; xxx.pkg是规则文件。
toLua++的作用就是读取xxx.pkg文件,然后结合-L中指定的lua(用于修改生成的代码),最终生成cpp文件。
在上图的Arguments中,添加相应的tolua++的参数。

更多关于-L的说明。 由于toLua++不支持回调函数,而cocos2dx中用到了如registerScriptHandler等回调函数,所以cocos2dx对用toLua++生成的代码进行了一些fix;这些fix的规则在tools/tolua++/basic.lua中定义。所以为了支持回调函数,请使用这个文件。

OK,工具配置完毕。

整合开发

创建一个cocos2d_lua工程,命名为LuaTest01。在项目的classes文件夹下创建一个pkg子文件夹,然后引入到工程中(我是用引用的方式加进来的)。
然后创建一个MyTest.h,并形成一个MyTest.pkg文件;具体如下图:

MyTest.h
#ifndef LuaTest01_MyTest_h
#define LuaTest01_MyTest_h

#include "cocos2d.h"
USING_NS_CC;

class MyTest: public CCLayer {
private:
    int invokeHandler;
public:
    MyTest() : invokeHandler(0) {}
    
    CREATE_FUNC(MyTest);
    
    void setHandler(int _handler)   {
        this->invokeHandler = _handler;
    }
    
    void callFunc() {
        CCLuaStack* pStack = CCLuaEngine::defaultEngine()->getLuaStack();
        pStack->pushInt(123);
        pStack->executeFunctionByHandler(this->invokeHandler, 1);
    }
    
    void sayHello() {
        CCLog("Hello, world!");
    }
    
    static void classInfo() {
        CCLog("This class is MyTest");
    }
    
    void otherFunc() {
        //This function doesn't expose to the lua
    }
};

#endif
把MyTest.cpp中要暴露的方法,整合到MyTest.pkg中,如下:
class MyTest: public CCLayer {  
    static MyTest* create();
    
    void setHandler(LUA_FUNCTION _handler) ;
    
    void callFunc() ;
    
    void sayHello() ;
    
    static void classInfo() ;
};
注意点:1)由于pkg中不识别宏,所以要把CREATE_FUNC(MyTest);展开成 static MyTest* create();
2)回调函数虽然是指针类型(也就是一个int),但是在pkg中要声明成LUA_FUNCTION这一自定义类型。然后在cocos2dx的一个扩展中(可以在basic.lua文件中找到)对其进行处理。

在eclipse中创建lua工程,并引用xcode中的pkg文件夹。如下图:




最终效果如下:

右击选择TextEditor,可以打开MyTest.pkg进行编辑。


保持MyTest.pkg为选择状态,然后点击工具栏上的luaMaker。将在pkg文件夹下生成MyTest.pkg.cpp文件。
在xcode中把MyTest.pkg.cpp文件拖到工程中,如下图:

在MyTest.pkg.cpp中加入头文件:
#include "MyTest.h"

拷贝MyTest.pkg.cpp中的tolua_MyTest_open函数的声明到MyTest.h中。
/* Exported function */
TOLUA_API int  tolua_MyTest_open (lua_State* tolua_S);
并在MyTest.h中引入下面的头文件:
extern "C" {
#include "tolua++.h"
#include "tolua_fix.h"
}
#include "CCLuaEngine.h"

在游戏启动代码中注册自定义的c++函数,使这些函数能够在lua中被使用。
在AppDelegate.cpp 中引用头文件MyTest.h;并在appicationDidFinishLaunching方法中加入如下代码:
tolua_MyTest_open(pEngine->getLuaStack()->getLuaState());
编译一下。OK,完成之后,我们编写的c++端的代码,通过tolua_MyTest_open被注册到了lua环境下了。接下来的事情就是编写lua端代码了。
切换到Eclipse下,和上面的方法一样,在Eclipse中引入xcode项目中的Resources目录,如下图:

双击打开hello.lua, 在main函数中加入如下代码:
	cclog("====test static method=====");
	MyTest:classInfo();
	cclog("====test member function========");
	local mt = MyTest:create();
	mt:sayHello();
	cclog("====test callback function=====");
	local function callback(num)
		cclog("This is the function from lua, and param is: " .. num);
	end
	mt:setHandler(callback);
	mt:callFunc();
	
结果如下:


准备工作做好之后,接下来在MyTest文件中添加函数的工作就很简单了。
1)在eclipse中修改pkg文件,选中其文件,执行luaMaker命令;
2)在xcode中打开MyTest.pkg.cpp, 加入MyTest.h头文件,编译;
3)在eclipse中,编辑lua文件,使用新加入的函数。
OK,enjoy yourself。

如果遇到编码问题,请右击文件-》properties;在弹出的对话框中选择编码,如下图:



参考文章:



分享到:
评论

相关推荐

    quick cocos2dx lua -v3.3

    开发技巧与建议 - **资源管理**:合理规划资源加载顺序,避免出现内存泄漏或卡顿现象。 - **性能优化**:充分利用 Lua 的性能优势,对关键逻辑进行优化处理。 - **调试工具**:利用调试工具进行实时监控,及时发现...

    使用_cocos2d-x_和_Lua_快速开发游戏.pdf

    3. **创建LuaHost项目**:使用cocos2dx_lua模板创建新项目,并设置在iOS模拟器中运行。 4. **配置Xcode**:针对iOS4.3模拟器进行配置,以避免不必要的警告信息干扰。 5. **修改AppDelegate.cpp**:调整脚本加载路径...

    关于手动绑定cocos2dx-lua C++接口详细教程

    Cocos2dx-Lua是一种结合了Cocos2dx游戏引擎与Lua脚本语言的开发框架,它允许开发者使用Lua进行游戏逻辑编写,同时利用C++进行底层性能优化。本教程将详细讲解如何手动绑定C++接口,以便于Lua端调用,覆盖从环境配置...

    vscode-coco2dx-lua-api.7z

    《使用VSCode高效开发Cocos2d-x Lua项目——基于"vscode-coco2dx-lua-api.7z"的工具解析与应用》 在现代游戏开发领域,Cocos2d-x作为一款广泛使用的跨平台游戏引擎,为开发者提供了丰富的功能和高效的性能。而在...

    Cocos2d-x实战++Lua卷.pdf

    2. **场景构建**:使用Lua脚本定义游戏场景中的各个元素及其初始状态; 3. **用户交互**:通过Lua编写事件响应函数,处理用户的触摸输入或按键操作; 4. **动画效果**:借助Cocos2d-x的动画系统,实现角色动作和特效...

    cocos2dx 游戏开发系列之三 源码

    通过这样的示例,你可以学习如何在Windows环境下构建和运行Android游戏,了解cocos2dx在不同平台上的兼容性和调试技巧。 总的来说,cocos2dx提供的源码和Android工程创建能力,使得开发者能够轻松地进行跨平台游戏...

    cocos2dx-lua在vs2015上的调试插件

    cocos2dx lua debug的插件,可以断点lua,看堆栈信息,单步调试lua。 解压后,先安装BabeLua For 2015 V3.2.2.0.vsix,再安装babelua-compat-1.06-VS2015

    cocos2dx-lua 笔记

    四、Cocos2dx-Lua 游戏开发流程 1. 创建项目:使用 Cocos Console 或者 Xcode、Android Studio 等工具创建新的 Cocos2d-x Lua 项目。 2. 编写 Lua 脚本:在项目的 scripts 目录下,编写游戏的各个模块,如主菜单、...

    cocos2dx lua绑定

    1. **设置环境**:首先,你需要配置好Cocos2d-x的开发环境,包括安装Lua和tolua++,并将它们添加到你的项目路径中。同时,确保CMakeLists.txt或类似的构建脚本能够找到这些依赖。 2. **编写C++接口**:在C++层面,...

    cocos2dx3.x游戏开发之旅电子版

    了解如何在Cocos2dx中嵌入和使用脚本,以及如何利用脚本进行游戏逻辑开发。 6. **物理引擎集成**:通过Box2D,你可以为游戏添加物理模拟,创建真实感的碰撞和重力效果。学习如何设置物理世界、创建刚体和关节,并...

    cocos2d-x_v3.16安装及环境变量配置文档

    整个安装和环境配置过程需要对操作系统、命令行操作、环境变量配置有一定的了解,还需要知道如何在开发环境中配置和解决常见的编译错误。对于想要进行跨平台游戏开发的开发者来说,熟悉 Cocos2d-x 以及其依赖环境的...

    Quick-Cocos2dx-Community 3.6.5 Release Note 带官方热更新等demo

    Quick-Cocos2dx-Community 3.6.5版本发布说明是Cocos2d-x社区的一个重要里程碑,这个版本包含了官方支持的热更新功能以及其他一些关键的改进和演示项目。Cocos2d-x是一个广泛使用的开源游戏开发框架,它基于C++,并...

    Cocos2dx lua版的富文本框

    Cocos2d-x是一款流行的开源游戏开发框架,广泛用于创建2D游戏、应用程序和互动媒体。在Cocos2d-x的Lua版本中,富文本框(TextArea)是开发者用来显示和编辑多格式文本的重要组件。它支持自动换行、手动换行、字体...

    cocos2d-lua整合到ios工程

    Cocos2d-x是一个强大的跨平台2D游戏开发框架,而Lua是一种轻量级的脚本语言,易于学习且适合游戏逻辑编写。本文将详细介绍如何将Cocos2d-x Lua项目整合到iOS工程中,以便在iOS应用中运行Cocos2d-x的lua脚本,实现...

    cocos2dx登陆模块客户端lua脚本

    cocos2dx上面的登陆系统lua实现

    Quick-Cocos2dx-Community 3.6.5

    Quick-Cocos2dx则是它的JavaScript和Lua接口,旨在提供更高效、更便捷的游戏开发体验。 在Quick-Cocos2dx-Community 3.6.5中,社区开发者们持续对原版Quick 3.3进行了优化和改进,以满足更多开发者的需求。这个版本...

    cocos2dx-lua 自建MVC

    【cocos2dx-lua 自建MVC】是一种在游戏开发中实现模型-视图-控制器(MVC)设计模式的方法,特别是在使用cocos2dx框架和lua脚本语言时。这种模式有助于组织代码,提高可维护性和可扩展性。在cocos2dx-lua项目中,MVC...

    cocos2dx-csd转lua py脚本文件.rar

    这个压缩包文件"**cocos2dx-csd转lua py脚本文件.rar**"包含了与Cocos2d-x游戏开发相关的工具,特别是涉及到将Cocostudio工程文件转换为Lua脚本的功能。Cocostudio是一款强大的2D游戏场景编辑器,它允许开发者通过...

    cocos2d-lua版消消乐源码

    通过深入研究这个cocos2d-lua版消消乐源码,开发者不仅可以了解游戏开发的基本流程,还能掌握lua脚本编程技巧,理解cocos2d-lua引擎的核心功能,为自己的游戏开发之路打下坚实的基础。同时,这个源码也提供了一个很...

Global site tag (gtag.js) - Google Analytics