cocos2d-2.1rc0-x-2.1.3使用lua

cocos2d-x 3.1中luasocket试用  我们的手机游戏新项目,较多的使用了lua,于是网络方面也就自然选择了luasocket了。 花了两三天时间来学习,调试通过,运行正常,于是发文分享。 准备工作 如何加载 luasocket官方文档http://w3.impa.br/~diego/software/luasocket/introduction.html,说的是使用require('socket'); 不过经 阅读详情
需要包含的头文件:
E:\cocos2d-2.1rc0-x-2.1.3\scripting\lua\lua
E:\cocos2d-2.1rc0-x-2.1.3\scripting\lua\tolua
E:\cocos2d-2.1rc0-x-2.1.3\scripting\lua\cocos2dx_support


加入lib的链接:liblua.lib,lua51.lib



使用VSLua实现在VS里面写,调试Lua。
但是只支持2008,2010,不支持2012.

网上有修改过的支持2012:


实在不行还有一个高亮插件,只能高亮了:



Lua脚本里面cclog不起作用的修改:
方案1:把cocos2dx的lua库,定义一个 COCOS2D_DEBUG重新编译

测试如下:


我们把lua保存为UTF-8,那么就还可以直接写中文输出了!


还有一个解决方案:
Just changed function in log.lua to CCLuaLog() and it’s star to work



讲解下(下面就是一个简单的例子):

-- for CCLuaEngine traceback
-- 也是异常的回调接口
function __G__TRACKBACK__(msg)
    print("----------------------------------------")
    print("LUA ERROR: " .. tostring(msg) .. "\n")
    print(debug.traceback())
    print("----------------------------------------")
end

cclog = function(...)
    print(string.format(...))
end
local CCLog = cclog
local CCLOG = cclog

local function main()

 cclog("main。。。。。");
 cclog("+++++++++++++++++++++++++++++++++++++++++++++++++++=");

 -- 操作垃圾回收器
 --[[
 collectgarbage (opt [, arg])
   功能:是垃圾收集器的通用接口,用于操作垃圾收集器
   参数:
   opt:操作方法标志
   "Stop": 停止垃圾收集器
   "Restart": 重启垃圾收集器
   "Collect": 执行一次全垃圾收集循环
   "Count": 返回当前Lua中使用的内存量(以KB为单位)
   "Step": 单步执行一个垃圾收集. 步长 "Size" 由参数arg指定 (大型的值需要多步才能完成),
   如果要准确指定步长,需要多次实验以达最优效果。如果步长完成一次收集循环,将返回True
   "Setpause": 设置 arg/100 的值作为暂定收集的时长
   "Setstepmul": 设置 arg/100 的值,作为步长的增幅(即新步长=旧步长*arg/100)
 --]]
    -- avoid memory leak
    collectgarbage("setpause", 100)
    collectgarbage("setstepmul", 5000)

    local visibleSize = CCDirector:sharedDirector():getVisibleSize()
    local origin = CCDirector:sharedDirector():getVisibleOrigin()


 local layer = CCLayer:create();
 local image = CCSprite:create("farm.jpg");
 layer:addChild(image);
 image:setPosition(ccp(100,100));

 local scene = CCScene:create();
 scene:addChild(layer);

 CCDirector:sharedDirector():runWithScene(scene);

end


-- pcall的函数,类似于try-catch是一种安全的调用方式
-- 如果没有异常和错误,pcall返回true和调用返回的任何值;否则返回nil加错误信息
-- 但是pcall返回的时候堆栈就没了,于是外界是不能打印堆栈的
--
-- xpcall就是完成这个的
-- 有异常就先调用异常处理函数 __G__TRACKBACK__
xpcall(main, __G__TRACKBACK__)



cocos2dx Lua的执行流程:



关于Lua的loader:

从 Lua 5.1 以后,Lua 有了标准的模块管理库。所以所有的模块加载都是通过 require 来完成。 require 的设计是颇具扩展性的,它会从若干个定义好的 loader 中逐个尝试加载新的模块。系统库中提供了四个 loader ,分别实现已加载模块,Lua 模块,和 C 扩展模块(用了两个 loader 来实现 C 扩展模块的加载)。这些 loader 以 CFunction 的形式放在 require 的环境中的一个 table 里。

如果我们想改变 lua 模块的加载形式,只需要替换或增加一个新的 loader 就可以了。

要做的只需要模仿 loadlib.c 中的 loader_Lua 函数做一个自己的实现,比如在我们的项目中,就允许从自定义格式数据包中,加载一个被加密过的 Lua 代码文件。然后写几行 C 代码,获得 require 的环境(使用 lua_getfenv ),然后取出其中 "loaders" 这个 table ,把新的自定义 loader 插入到 index 2 的地方。

具体的代码就不详述了,仔细阅读一下 ll_require 的实现(在 loadlib.c 中)就很容易明白。我们的整个工作从分析到实现没有超过两个小时,这真是得益于 Lua 良好的设计啊 :D 甚至如果你想从一个网络连接的数据流中加载 Lua 模块,或是通过 http/ftp 协议下载,也是行的通的吧。



lua里面使用我们C++层定义的类:
所以,如果想把我们的暴露给lua,直接根据上面分析的流程,直接在tolua_Cocos2d_open里面添加注册就是了。
可以用tolua(一个小工具,提供了很多方便方法),或者直接注册。

直接看用tolua工具注册:
E:\cocos2d-2.1rc0-x-2.1.3\tools\tolua++里面的README有简单的讲解。
比如使用BaseSprite类(这个类使用了ResourceManager这个类),

第一步:写tolua工具的配置文件(就是.pkg/或者.tolua文件,比如CCAction.pkg),写法其实就是头文件的修改版而已。
详细的步奏见:
我们要像Lua暴露出BaseSprite的方法,于是就直接修改BaseSprite.h到BaseSprite.pkg

第二步:拷贝到E:\cocos2d-2.1rc0-x-2.1.3\tools\tolua++
然后把pkg添加到Cocos2d.pkg里面。这样build的时候才会把这个pkg加进去


第三步:根据情况修改basic.lua
因为lua有自己的内存管理,但是CCObject都是自己管理内存的,所以我们继承自CCObject的所有子类都应该告诉Tolua。
不然会内存泄露。

注册与否的区别(一个是tolua_pushusertype,一个是toluafix_pushusertype_ccobject):

第三步:执行build.bat/[.sh]
脚本的内容是:
tolua++ -L basic.lua -o "../../scripting/lua/cocos2dx_support/LuaCocos2d.cpp" Cocos2d.pkg
意思是:在执行之前先执行basic.lua脚本,然后再根据Cocos2d.pkg指定的各个pkg,执行生成LuaCocos2d

到对应的目录中查看就可以看到新修改好的LuaCocos2d

我们查看
LuaCocos2d的tolua_Cocos2d_open 函数后面,就添加上了我们的代码:
  tolua_cclass(tolua_S,"BaseSprite","BaseSprite","CCSprite",NULL);
  tolua_beginmodule(tolua_S,"BaseSprite");
   tolua_function(tolua_S,"create",tolua_Cocos2d_BaseSprite_create00);
   tolua_function(tolua_S,"create",tolua_Cocos2d_BaseSprite_create01);
   tolua_function(tolua_S,"getFileName",tolua_Cocos2d_BaseSprite_getFileName00);
   tolua_function(tolua_S,"initWithFile",tolua_Cocos2d_BaseSprite_initWithFile00);
   tolua_function(tolua_S,"initWithFile",tolua_Cocos2d_BaseSprite_initWithFile01);
   tolua_function(tolua_S,"initWithFileDelay",tolua_Cocos2d_BaseSprite_initWithFileDelay00);
   tolua_function(tolua_S,"removeNode",tolua_Cocos2d_BaseSprite_removeNode00);
  tolua_endmodule(tolua_S);
就完成了注册了!!
把生成的LuaCocos2d.cpp拷贝到我们项目里就是了。然后添加好头文件就是了。

上面的basic.lua是一些其他的逻辑,比如LUA_FUNCTION类型的处理(LUA_FUNCTION用于在C++声明lua的函数)。

第四步:测试
注意,这里修改的是scripting/lua/cocos2dx_support/LuaCocos2d.cpp,所以,以后新建的lua项目都用的这个这个文件了。

成功!

《Cocos2d-x-3.2 Lua-tests》文件详解 之 加速器 转到游戏开发已经俩月了(第一个月还是酱油过来的),主要是用cocos2d-x + Lua脚本做语言快速开发。几个项目下来,体味到了cocos2d-x 和 Lua的强大之处。 但是有些东西掌握地不牢,用的时候不免会捉襟见肘。所以决定将对Lua-tests进行解读,记录下来,一来温故知新,二来与大家交流,共同进步。 接下来的博文中,如有错误的地方,还需要大家不吝指正! 本博文对应的引擎版本和工具 阅读详情

相关推荐

cocos引擎老版本集合(cocos2d-x-2.2.1 - 3.5)

cocos引擎老版本下载集合(cocos2d-x-2.2.1 - 3.5),分别有cocos2d-x-3.5、cocos2d-x-3.4、cocos2d-x-3.2、cocos2d-x-2.2.6、cocos2d-x-2.2.2和cocos2d-x-2.2.1。

vs2005安装cocos2d-x模版(版本cocos2d-2.1rc0-x-2.1.3)

打开\cocos2d-2.1rc0-x-2.1.3\template\msvc\InstallWizardForVS2010.js,搜索“10.0”,替换成“8.0”; 打开\cocos2d-2.1rc0-x-2.1.3\template\msvc\CCAppWiz.win32\Templates\1033\proj.win32\main.h,删掉第11行“#include "CCStdC.h"

yes2的专栏 1210

cocos2d-x-2.2.1旧版引擎下载

cocos2d-x-2.2.1下载,不多说。或者可以下载另一个资源 cocos引擎老版本集合(cocos2d-x-2.2.1 - 3.5) http://download.csdn.net/download/crazymagicdc/9982656

cocos2d-x-2.2.3和vs2012环境配置

cocos2d-x真是个好东西,以前一直想学,总觉得C++自己搞不来,真后悔最近才开始。一平台编译,多平台运行,是在是诱惑人,如果学习好,就不用羡慕别人华丽的游戏了。既然是新手,一定要从最基本的环境开始, 虽然网络上有很多的搭建教程,但多数都是基于旧版本,很多配置都不一样,对新手来说着实痛苦,多翻查询,零零碎碎的拼起来第一篇学习笔记,记录一下吧        本篇是基于cocos2d-x-2.

Mr梵谷的专栏 1万+

cocos2d-x-2.1.4

cocos2d-x-2.1.4.part1.rar

cocos2d-x简单绘图

采用cocos2d-2.1rc0-x-2.1.2-hotfix + VS2010 简单动画绘图的例子

1.cocos2d-x介绍和安装(for mac)

鉴于cocos2d-x优良的跨平台性,开源和社区支持等原因,博主终于开始cocos2d-x的学习。 今天主要是在MAC下搭建cocos2d-x的开发环境。 1.首先,去官网下载cocos2d-x 博主下的是cocos2d-2.1rc0-x-2.1.3,以下是各个版本的下载 http://code.google.com/p/cocos2d-x/downloads/list 压缩...

中苑 219

cocos2d-x 《魔塔》源码 2.1.1 中期

在我的博客中改写魔塔项目所完成的中期阶段的源码,一切以此项目源码为准,请下载参考,了解详情请移步我的博客

cocos2d-x 跨平台搭建

相关下载: 请对应自己的操作系统平台下载 http://www.oracle.com/technetwork/java/javase/downloads/index.html(jdk-7u21-windows-x64.exe) http://developer.android.com/index.html(NDK以及ADT) http://www.microsoft.com/visua

loganv的专栏 580

SimpleITK图像基础(一)——3D Resampling

文章目录前言基于SimpleITK进行实现 前言 进入深度学习网络之前需要进行统一数据集,这个时候需要对这些数据集进行重新采样,即假设各向同性体素并重新定向它们,以便可以读取所有图像的像素矩阵。 在将方位变换成一致时,可以用DICOMOrientImageFilter过滤器,可以将 DesiredCoordinateOrientation设置为你想要变换的方位,它将计算出所需的置换顺序并根据需要执行翻转以接近所需方向。 基于SimpleITK进行实现 workflow如下: step 1:首先运行DICOM

YYY_77的博客 2019

大漠插件找图找字避坑手册:从ziku0.txt字库制作到易语言精准识别(附综合工具实操)

本文深入解析大漠插件在图像识别中的核心难点,提供从ziku0.txt字库精准制作到易语言高效调用的完整避坑指南。重点讲解如何利用大漠综合工具科学设置偏色与二值化参数,生成高质量色彩描述字符串,并分享识别失败的系统排查方法与进阶优化策略,旨在实现99%的稳定识别率。

weixin_29264201的博客 1208

[cocos2d-x学习之路]Cocos2d-x下载与安装

Cocos2d-x引擎可以从Cocos2d-x官网下载: http://cocos2d-x.org/projects/cocos2d-x/wiki/Download,下载最新的引擎 安装: 接下来,把下载的cocos2d-2.1rc0-x-2.1.3.zip文件 解压到Documents(也就是文稿)下来,根据自己的操作习惯来解压指定的位置,启动终端;(点击Finder-前往-实用工具-终端

追梦 1565

C# 死锁:原理、诊断与解决方案深度解析

本文深入探讨了C#中的死锁问题,详细介绍了死锁的基本概念、形成机制、常见场景、诊断方法及解决方案。死锁通常发生在多线程环境下,当多个线程因争夺资源而互相等待时,导致程序无法继续执行。文章通过代码示例展示了常见的死锁场景,如锁的嵌套、同步上下文死锁和线程池死锁,并提供了使用Visual Studio、WinDbg等工具进行死锁诊断的方法。此外,文章还提出了多种预防和解决死锁的策略,包括保持锁顺序一致性、使用锁超时机制、避免同步阻塞异步代码以及使用更高级的同步原语。通过这些方法,开发者可以有效减少死锁的发生,提

记录学习的过程 1407

Cocos2dx-lua 实现lua面向对象编程,并继承CCSprite

勤奋努力,持之以恒! 开发环境: Mac OSX 10.9.3 Cocos Code IDE :V1.0.0.RC0 Cocos2dx-v3.2 Cocos2dx中其实已经提供了类继承的一下工具函数,在yin中的samples/Lua/TestLua/Resources/luaScript目录下有一个名为“extern.lua”,其中有段代码如

song_hui_xiang 4972

室内温度控制仿真(Simulink+PLC)

本篇博客将会带领大家解读Simulink自带的仿真模型(Thermal Model of a House),之后再讨论PLC控制系统控制环境温度的一些经验方法

RXXW_Dor的博客 3462

C-Lodop打印服务系统存在任意文件读取

C-Lodop打印服务系统存在任意文件读取

weixin_43567873的博客 2873

Cocos2d-x在win32下创建支持lua项目

Cocos2d-x版本:cocos2d-2.1rc0-x-2.1.3 我是通过这个博客改的: http://www.360doc.com/content/13/1019/15/14253074_322581758.shtml 1.创建cocos2d-x项目在后面选上支持lua 2.在属性目录改一些东西 (1)、首先改

shinhwalin 1398

视觉媒体通信作业记录(六)端到端的视频传输系统

将采集、编码、传输、显示各模块连接起来,形成一个端到端的视频通信系统,开发一个特色模块,将其加入系统;

weixin_45774698的博客 1967

No implementation found for native Lorg/cocos2dx/lib/Cocos2dxLuaJavaBridge;.callLuaFunctionWithStrin

No implementation found for native Lorg/cocos2dx/lib/Cocos2dxLuaJavaBridge;.callLuaFunctionWithString:(ILjava/lang/String;)I 本人遇到这个问题的原因是因为,用的是cocos2d-x 3.3 rc0 , 后来几经波折,终于把这个问题解决了。这个是cocos2d-x 3.3 r

xiaweiliang90的专栏 2830

如何离线环境下安装Dify插件 (可提供远程指导协助)

离线环境下安装Dify插件

litlit023的专栏 8100

Python爬虫实战【房产刚需专属】:爬取链家/贝壳完整房源数据,精准筛选刚需房源【房价+户型+地段+面积+装修】

本次爬虫的核心亮点就是刚需专属筛选,我已经把刚需买房的主流筛选逻辑封装为独立函数,你只需要修改筛选参数,就能精准匹配你的需求无需懂Python语法,直接改数字/文字即可!本次爬虫是刚需买房+Python爬虫实战的完美结合。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1824

使用Cocos Code IDE运行lua-test(本人使用的是cocos2d-x 3.3rc0)

《Cocos2d-x-3.2 Lua-tests》文件详解 之 加速器 现在主流的移动游戏开发方法是cocos2d-x + Lua脚本语言做快速开发。经历了几个小游戏的开发过程,体味到了cocos2d-x 和 Lua的强大之处。 但是有些东西掌握地不牢,用的时候不免会捉襟见肘。网上提供的资料也是零零散散的,有时候看起来然人一头雾水。 所以决定将对Lua-tests进行解读,记录下来,

u012816829的专栏 805

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

cocos2d-2.0-rc2-x-2.0.1升级到cocos2dx3.172引擎日志

将 Cocos2d-x 从升级到是一个较大的版本跨越,涉及引擎架构、API 和工具链的显著变化。以下是详细的升级步骤和注意事项:1.首先,Cocos2d-x从2.x到3.x是一个巨大的升级,架构变化很大,API也有很多不兼容的地方。用户需要了解升级可能带来的工作量,特别是代码层面的修改。备份项目、下载新引擎、查看官方文档和发布说明。然后是新项目的创建,建议用户用3.17.2创建一个新项目,再将旧代码迁移过去,而不是直接替换引擎,这样可能更稳妥。2.然后是代码迁移,这部分比较复杂。

Superme的博客 1279

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Cocos2d-x 3.0 RC lua绑定教程 及 新特性介绍。

这篇文档分2个部分,1个是lua绑定教程,(主要来源于引擎目录too/tolua 下的readme文档的翻译),第2个是 3.0 RC0的一些新特性。如果熟知lua绑定的同学,请直接跳过第一部分。 **************************************lua绑定教程************************************* 如何使用 binding

linking530的专栏 625

cocos2d-x3.0版本c++类的lua绑定

这周看了一下lua绑定的各种帖子和方法,从3.0开始好像绑定方法变成自动的了

1831

cocos2d-2.1rc0-x-2.1.3

Cocos2D-x 2.0以上版本跨Win32、Android、iOS三个平台,本文介绍Cocos2D-x在这三个平台上如何搭建开发环境。 一、Windows开发环境配置 1、Visual Studio安装                Cocos2D-x支持Visual Studio的版本包括VS2008、VS2008 Express、VS2010和VS2012。本文选择VS2010

linking530的专栏 1652
上一篇: Json的笔记和摘抄
下一篇: C++调用Lua,初探
WhyHowWhat
博客等级 码龄14年 2粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值