cocos2dx的lua绑定

cocos2dx修改引擎代码进行lua绑定 之前,因为项目需求,需要重写一下贝塞尔曲线,因为贝塞尔曲线在执行时,没有把考虑执行体的角度增加进去,所以为了实现这一需求,现在要将贝塞尔重写一下。通过查看源码,发现BezierTo继承BezierBy,而执行体的位置发生变化,就是发生在BezierBy中update中。 Vec2 currentPos = _target->getPosition(); Vec2 diff = curren 阅读详情


话接上篇(tolua++实现分析)

一、cocos2dx对tolua++绑定的修正

A.c对lua回调函数的引用

在使用cocos2dx编写游戏时,我们经常会设置一些回调函数(时钟、菜单选择等)。如果采用脚本方式编写游戏的话,这些回调函数也是需要写在脚本里的。实现这个功能,就需要lua将自己的函数传递给c++,c++保持对这个函数的引用,不要让这个lua函数被垃圾回收,并在适当的时候回调这个lua函数。

这种需求的一般抽象是在C环境下保存lua状态,在PIL(Programming In Lua)里有比较详尽的描述。可以使用luaL_ref函数,将一个luaValue(function、table等没有直接对应c类型的数据)存储到LUA_REGISTRY里(luaL_ref返回一个唯一整数,c++可以用这个整数来索引对应的luaValue)

不过cocos2dx因为某种原因,并没有使用这个功能,而是自己实现了一套类似的引用机制。

cocos2dx注册回调函数的接口,除了一个参数为c函数指针的版本外,都会提供一个参数为int的对应版本。阅读一下自动生成的cocos2dx lua绑定代码,会发现注册回调函数的接口,都会调用toluafix_ref_function函数,将lua函数转换为一个LUA_FUNCTION(int),并调用响应的注册回调函数的cocos2dx api。

这个toluafix_ref_function,定义在tolua_fix.c里,干的事情就很类似luaL_ref了。区别是对lua函数的引用,没有直接保存在LUA_REGISTRY里,而是放在一个自己创建的表格里。


B.野指针预防

使用已经释放的指针,通常是一个令人头疼的bug来源。如果能提早发现对野指针的使用,对于bug的定位有很大好处。tolua_fix.c里也提供了这样一套检查机制。

阅读自动生成的cocos2dx lua绑定代码,会发现每当把一个继承自CCObject类型的对象传给lua时,会调用toluafix_pushusertype_ccobject函数。

如果这个对象是第一次传递给lua,toluafix_pushusertype_ccobject会为这个对象生成一个索引id,并将这个对象的指针、类型字符串和这个索引相关联。cocos2dx再将这个索引存储在CCObject数据结构里。

在c++里析构这个对象时,CCObject的析构函数会调用toluafix_remove_ccobject_by_refid。这个函数先利用整数索引,找到指针、类型字符串,再通过tolua的tolua_ubox表格(见tolua++实现分析),取到对象的userdata(值为对象的地址),将它置空。这样,以后lua环境再使用这个对象,调用这个对象的c接口时,只能取到空地址,错误也能提早发现了。


二、使用tolua++导出自定义类时,注意定制tolua++

上面提到的cocos2dx对tolua++的修正,体现在代码上,要对标准的tolua++自动生成的绑定代码,进行上百处修改。手工修改显然不适合。tolua++提供了通过重定义lua文件来定制自己的机制。

参考cocos2dx里调用tolua++的shell脚本命令

${TOLUA} -L basic.lua -o ../../scripting/lua/cocos2dx_support/LuaCocos2d.cpp Cocos2d.pkg

这里的-L basic.lua就指定了一个重定义文件。

在这个文件里,指定了LUA_FUNCTION类型的转换函数(toluafix_ref_function)、类型判断函数(toluafix_isfunction),指定了对哪些继承自CCObject的类型,使用自定的推入函数(toluafix_pushusertype_ccobject),另外还进行了一些文本替换,达到一些特殊的功能。

如果你的导出类需要注册lua回调函数,或者继承自CCObject,那么这个重定义文件的帮助就很大了。另外还要注意,在tolua++的pkg定义文件里,对回调函数,使用LUA_FUNCTION做类型名称,而不是int(与重定义文件一致)


三、lua里的类型系统,对c++类型的继承

游戏开发是比较适合使用面向对象模型的,lua语言本身虽然没有提供面向对象模型,但是通过它的metatable机制,也有各种方式来实现这种模型。cocos2dx的LuaTest工程的extern.lua文件里,就提供了一种方式,既可以继承lua里的table类型,又可以通过调用c++生成对象接口的方式,继承c++类型。对c++对象的继承,在子类新增成员时,使用了tolua++的peer功能,给userdata添加字段。


四、其它的cocos2dx lua资源

quick-cocos2d-x

提供了一整套成熟的cocos2dx lua framework。上面提到的lua++绑定修正、类型继承方式,cocos2dx应该都是吸收了quick-cocos2d-x中的相应功能。

本文上面对lua++绑定修正的分析,也得到了quick-cocos2d-x作者dualface的帮助。


cocos2dx-LuaProxy

针对cocos2dx-extension的lua绑定做了一些工作。包括绑定cocosbuilder、tableview等


五、cocos2dx 2.1.4

在cocos2dx 2.1.4的change log上看到新增了大部分lua test。如果是这样的话,那么对lua绑定的支持又上了一个台阶。

令我比较感兴趣的更新是对cocosbuilder的新绑定方式。相较cocos2dx-LuaProxy对cocosbuilder的绑定,新的绑定采用类似官方js绑定的方式,每个cocosbuilder自定义类型对应一个lua里面的模块,自动导出cocosbuilder的成员变量到对应模块里。虽然要写模块定义文件,但对于较大型项目,这种方式感觉更合适一些。

原文地址:http://blog.youkuaiyun.com/wtyqm/article/details/9106137

cocos2dx lua绑定 cocos2dx lua绑定,基于tolua++、Python工具实现cococs2dx环境下的lua脚本绑定。 立即下载

相关推荐

给MATLAB安装runtime插件

输入你刚刚下载压缩包的位置(小白提示:在 此电脑 中找到压缩包位置,右键属性复制位置)(!设置好以后然后填写下面输出exe文件的信息,包括文件的名字、作者、Email、公司、概述、描述,下面还可以选择额外的安装选项,exe文件运行需要的其他文件(图像、子程序等)、提供给用户的文件(readme.txt等)(很多方法是官网下载,但在官网下载还是会版本不对应,所以直接在你所用的MATLAB里搜索安装链接最靠谱)(!5.可以打包程序了(你发送文件的人电脑里没有MATLAB也可以查看运行你的程序了)

Pei_hua100的专栏 1万+

【Cocos2dx】【一】lua c++ 绑定

代码是在C++层面调用的,肯定可以直接用代码调用。那是否代表Lua 里,调用一个函数,C里也是这么执行的?原因也没看懂。lau.h 中定义了要注册到 lua 中的 c 函数的原型返回值(int)表示此函数有几个返回值,lua 执行完些函数之后根据这个返回值就知道需要从栈中取几个返回值.参数 lua_State* L,c 函数内可以使用 CAPI 来操作栈,与 lua 交互tolua 也叫 tolua++,是一个第三方库,简化了 lua 访问 c/c++ 的工作。

??? 1750

stackelberg博弈_博弈论、多智能体、强化学习(随便记点东西)

多智能体应用场景:已实现:游戏AI。正在努力:UAV,物资运输,快递分发,交通系统。未来:社会学,预测群体行为,城市区域合作,国际关系。博弈论基本定义:玩家集合: 策略集合: 收益函数: 囚徒困境:两智能体矩阵博弈坦白抵赖坦白1,13,0抵赖0,32,2占优策略与最佳应对:上表中两者均具有占优策略,即无论如何都应该选坦白。那么构造下表。坦白抵赖坦白1,13,0抵赖0,12,2对于玩家一来说,坦白...

weixin_39611722的博客 2997

cocos2dx-Lua绑定

最近开始使用cocos2dx进行游戏开发,过程中发现有些东西需要使用c++进行实现,暴露给lua层使用,所以研究了下cocos2dx自带的tolua插件功能,发现网上相关的资料都写得比较粗略,故自己总结一篇,以加深印象。 一、环境配置(win) lua绑定所需要的环境,可以通过查看frameworks/cocos2d-x/tools/tolua目录下的README文档得知,按照文档要求配置相关环境...

借问时人会也无 518

DP83848以太网PHY芯片:自动协商与MII/RMII接口实战解析

以太网物理层(PHY)芯片是嵌入式网络通信的核心,负责数字信号与模拟信号的转换,其稳定性和兼容性直接影响系统性能。其工作原理基于IEEE标准,通过管理接口(MDC/MDIO)配置内部寄存器,实现链路速率、双工模式等关键参数的设定。这项技术的核心价值在于为工业控制、汽车电子等严苛环境提供可靠、自适应的网络连接。在实际应用中,PHY芯片通过自动协商(Auto-Negotiation)功能与对端设备智能匹配最佳通信模式,极大提升了产品的易用性。同时,其支持的MII与RMII接口为硬件设计提供了灵活性,前者是标准并

weixin_29189987的博客 374

【Flink on k8s】- 1 - Flink Kubernetes Operator 简介 2023

Flink Kubernetes Operator 可以与 Kubernetes 的其他功能和工具集成,可以帮助用户快速定位和解决问题。Flink Kubernetes Operator可以在Kubernetes上实现高可用性,以确保 Flink 集群的稳定性和可靠性。Flink Kubernetes Operator 可以快速地部署 Flink 集群,而无需手动配置和管理集群。Flink Kubernetes Operator可以将Flink集群与其他应用程序隔离,以避免资源争用和干扰。

欢迎来到我的博客,一起探索代码里的世界! 1344

cocos2d+lua绑定关系理解——一

通过lua代码往上层追溯,从整体上理解cocos2d+lua的接口设计思路和整套代码的运行流程。 首先来看一句简单的lua代码 local spr = cc.Sprite:create() cc是一张表(table),表(table)是lua里面唯一的数据结构,cc存于_G中,_G是lua里面的全局表,cc表中存了所有cocos绑定的常量和“类”。 Sprite也是个表(table),S...

fengkingj的专栏 1828

【YOLO系列】YOLOv11详解:模型结构、损失函数、训练方法及代码实现

YOLOv11在目标检测领域实现重大突破,通过动态骨干网络(Dyna-Backbone)和FPN++架构,在保持高帧率(≥60FPS)的同时提升小目标检测精度(AP_S提升5.6%)。创新采用CIoU++损失函数和类别平衡Focal Loss,结合Mosaic-Plus数据增强,参数量减少18%至6.5M。实验显示,该模型在COCO数据集上实现更高mAP,特别适合移动端部署,Jetson Xavier平台能耗比优化至3.2W·ms⁻¹,支持目标检测、实例分割等多任务场景。关键创新包括动态深度调整和双向特征金

一碗白开水一 3444

【步兵 cocos2dx】lua绑定

【步兵 cocos2dx】lua绑定 By EOS.最近想搞一搞自动化测试,涉及到luabinding,简单的写一篇教程。 不过并不打算写很仔细,因为这种东西网上太多一搜一大片。刚刚实现了模拟点击,绑定到lua上了,再读取个文件模拟各种点击行为, 配合脚本每个配置文件重启运行、遍历log文件,发现error就把log文件cp过来,统计报错。 感觉大有搞头,想想都美滋滋,趁着心情好写一篇刚刚

博客 by EOS. 1125

ESD防护设计宝典(十):RE(辐射发射)超标问题排查与解决

RE测试是EMC认证的“头号杀手”。当屏幕上出现一根根超标频谱线时,如何快速定位元凶并有效整改?本讲将带你化身电磁侦探,完成一次完美的RE问题“缉凶”。

m0_56451176的博客 394

使用R语言整理GEO数据的简易教程

本教程介绍了使用R语言从GEO数据库下载数据并进行数据整理的基本步骤。根据实际研究问题,你可能需要进行更复杂的数据处理和分析。R语言作为一种强大的生物信息学工具,为GEO数据的整理、分析和可视化提供了丰富的功能和工具。希望这个教程能够帮助你入门GEO数据整理和R语言的应用。如果你在使用过程中遇到问题,或需要进一步的指导,请随时向我询问。祝你在GEO数据分析的旅程中取得成功!

Mrrunsen的博客 3741

cocos2dx3.X lua绑定

1.cocos2dx3.x lua的绑定有两种方法: 第一种是使用generator.py脚本根据.ini配置文件生成绑定的.cpp和.hpp文件; 另一种是手动绑定,工程中cocos2d-x\cocos\scripting\lua-bindings\manual中的文件都是手动进行绑定的 首先,使用generator.py自动绑定流程,要进行自动绑定需要修改.ini和genbindings...

GJQI12的专栏 334

姿态传感器/陀螺仪之IIS2DLPC 应用驱动程序设计

* 转换为°C单位 (参考温度为25°C,灵敏度为16 LSB/°C) */

corlin6688的博客 220

[Cocos2dx]C++自定义类绑定到Lua

Cocos2dx通过工程里面的tools/toLua工具生成注册C++函数到lua的函数cpp文件 bindings-generator脚本的工作机制 不用编写.pkg和.h文件了,直接定义一个ini文件,注册到Lua环境里的模块名是什么,就行了。 摸清了toLua++工具的生成方法,改由Python脚本动态分析C++类,自动生成桥接的.h和.cpp代码,不调用tolua++命令了 ...

超越 1529

老版QQ原生表情gif动态

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

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

cocos2dx lua 绑定:自动绑定自定义类中的函数 【转载】

1、博客介绍 强调:本篇博文内容非原创,转载自以下链接,感谢博主能够提供优秀的文章学习! 原创:https://www.cnblogs.com/chevin/p/5899516.html 内容介绍:本篇博客介绍了cocos2dx中,自定义C++脚本绑定到lua的具体步骤,原博主写的很清晰明了,这里转载以作记录和学习! 2、内容 1.首先定义C++类Student 在cocos2d-x\cocos文件夹下新建一个user_define的文件夹放置两个文件。 注意:这个类没...

孙君的空间站 464

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

cocos2dx 3.2 lua绑定

1、环境         电脑系统:win7  64位系统         cocos2dx:3.2版本 2、配置步骤         1>python        下载 python2.7.3 (`32bit`) 从 (http://www.python.org/ftp/python/2.7.3/python-2.7.3.msi)。安装Python,并且配置环境变量,把Python目

本是后山人 2271

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

cocos2dx的lua绑定 【转】

原文地址:http://blog.youkuaiyun.com/wtyqm/article/details/9106137   话接上篇(tolua++实现分析) 一、cocos2dx对tolua++绑定的修正 A.c对lua回调函数的引用 在使用cocos2dx编写游戏时,我们经常会设置一些回调函数(时钟、菜单选择等)。如果采用脚本方式编写游戏的话,这些回调函数也是需要写在脚本里的

sharemyfree的专栏 798

关于在Cocos2dx引擎中手动绑定C++到Lua

虽然大多数写的代码是Lua脚本,但是仍然会遇到单纯的使用Lua语言解决不了的问题,而只好要先用C++写好想要的功能,然后留好接口给Lua调用, 那么问题来了,怎么将C++写好的函数绑定到Lua中呢。。。 当然Cocos2dx3.x版本的应该集成了绑定这一功能,但是下面我要说的是绑定固定的函数到Lua中。 先在C++中实现自己的静态函数(此处只贴出声明.h): 1 // ...

dicuolu4266的博客 136

cocos2dx C++ 绑定到 Lua时两个问题

A.运行genbindings.py出现PYTHON_BIN not defined, use current python. 解决方案: cocos2dx C++ 绑定到 Lua时,运行genbindings.py出现PYTHON_BIN not defined, use current python.请参照 cocos2dx3.0rc导出自定义类到lua的方法详细步骤一文中安装第一要点:

2046

cocos2dx原生lua绑定工具的总结

转载:http://www.cocoachina.com/bbs/read.php?tid=226362  cocos2dx原生lua绑定工具的总结    本帖属于CocoaChina会员发表,转帖请写明来源和帖子地址 一、个人对“绑定”这词有两种理解 1、lua绑定到C++,就是C++能调用到lua的东西,那必须让C++知道有哪些lua函数或变量可以

harbinxxh的专栏 1993

cocos2dx lua学习笔记 <一> quick 3.5把自定义C++类绑定到lua

首先去官网下载最新的quick,配置好环境,创建一个lua工程,命令 cocos new XXX(项目名称) -p com.xxxx.xxxx(包名) -l lua -d xxx(新建工程保存路径) 工程创建后,找到工程目录下的frameworks\runtime-src\Classes,创建一个c++类,我创建的类是 文件名:LuaBindingTest.h #pragma once

wushao126的专栏 1696
上一篇: tolua++实现分析
下一篇: cocos2dx-lua绑定之代码编辑器
cbbbc
博客等级 码龄15年 609粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值