这里的系统导出类主要是指Sprite、Image这种cocos2dx lua默认就导出的类,有时候部分cocos2dx c++对应类的接口并没有导出,这就需要我们自己添加导出函数。相比于自定义类的导出,要简单不少。 首先确定这些类的导出定义在工程中的\frameworks\cocos2d-x\cocos\scripting\lua-bindings\auto\lua_cocos2dx_auto.cpp中,比如lua_cocos2dx_Node_开头的函数就是Node类的导出定义。 基本步骤: 1)添加对应的导出函数,lua_cocos2dx_类名_函数名 2)在对应的"lua_register_cocos2dx_类名"函数中添加对应的导出定义 3)重新编译即可 例如:Image类并没有提供一个返回某个点是否透明的函数,下面添加一下 1)在lua_cocos2dx_auto.cpp中添加lua_cocos2dx_Image_isPixelTransparent函数 int lua_cocos2dx_Image_isPixelTransparent(lua_State* tolua_S) { int argc = 0; cocos2d::Image* cobj = nullptr; bool ok = true; #if COCOS2D_DEBUG >= 1 tolua_Error tolua_err; #endif #if COCOS2D_DEBUG >= 1 if (!tolua_isusertype(tolua_S,1,"cc.Image",&tolua_err)) goto tolua_lerror; #endif cobj = (cocos2d::Image*)tolua_tousertype(tolua_S,0); #if COCOS2D_DEBUG >= 1 if (!cobj) { tolua_error(tolua_S,"invalid 'cobj' in function 'lua_cocos2dx_Image_getWidth'",nullptr); return 0; } #endif argc = lua_gettop(tolua_S) - 1; if (argc == 2) { int arg0; int arg1; ok &= luaval_to_int32(tolua_S,2,&arg0,"cc.Image:lua_cocos2dx_Image_isPixelTransparent"); if (!ok) { tolua_error(tolua_S,"invalid arguments in function 'lua_cocos2dx_Image_isPixelTransparent'",nullptr); return 0; } ok &= luaval_to_int32(tolua_S,3,&arg1,nullptr); return 0; } unsigned char *data = cobj->getData(); //这里就是图片数据了 int len = cobj->getDataLen(); int x = arg0; int y = arg1; //根据刚刚计算的相对坐标值,计算出触摸点代表了哪一个像素点 然后再提取出该像素点的alpha值 //注意:因为图片坐标(0,0)是在左上角,所以要和触摸点的Y转换一下,也就是“(myImage->getHeight() - (int)(ps.y) - 1)” //该data值是把二维数组展开成一个一维数组,因为每个像素值由RGBA组成,所以每隔4个char为一个RGBA,并且像素以横向排列 int pa = 4 * ((cobj->getHeight() - (int)(y)-1) * cobj->getWidth() + (int)(x)) + 3; bool ret = true; if (pa >= len) { ret = true; } else { unsigned int ap = data[pa]; if (ap == 0) { ret = true; } else { ret = false; } } tolua_pushnumber(tolua_S,(lua_Number)ret); return 1; } luaL_error(tolua_S,"%s has wrong number of arguments: %d,was expecting %d \n","cc.Image:isPixelTransparent",argc,2); return 0; #if COCOS2D_DEBUG >= 1 tolua_lerror: tolua_error(tolua_S,"#ferror in function 'lua_cocos2dx_Image_isPixelTransparent'.",&tolua_err); #endif return 0; } 2)在函数lua_register_cocos2dx_Image中,添加 tolua_function(tolua_S,"isPixelTransparent",lua_cocos2dx_Image_isPixelTransparent); 3)编译C++代码 4)在lua中使用 local image = cc.Image:new() image:initWithImageFile("res/star.png") local isTransparent = image:isPixelTransparent(100,100) print("isTransparent=",isTransparent) 就可以了

Quick-cocos2d-x如何修改系统原有导出类的函数的更多相关文章

  1. 手把手教你swift项目添加cocos2dx-lua

    去倒杯水吧,这个过程会很久。。。至此,工程已经全部配置完毕,你已经解决一个大Boss了;今天就到这里吧,之后我们再续如何用swift调用lua手把手教你swift项目添加cocos2dx-lua

  2. SpringBoot+Redis+Lua分布式限流的实现

    本文主要介绍了SpringBoot+Redis+Lua分布式限流的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  3. Lua表达式和控制结构学习笔记

    这篇文章主要介绍了Lua表达式和控制结构学习笔记,本文讲解了算术操作符、关系操作符、逻辑操作符、局部变量与作用域、控制结构等内容,需要的朋友可以参考下

  4. Java代码中与Lua相互调用实现详解

    这篇文章主要为大家介绍了Java代码中与Lua相互调用实现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  5. springboot使用redisTemplate操作lua脚本

    本文主要介绍了springboot使用redisTemplate操作lua脚本,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  6. php使用lua+redis实现限流,计数器模式,令牌桶模式

    这篇文章主要介绍了php使用lua+redis实现限流,计数器模式,令牌桶模式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  7. 试图从Lua中的字符串获取某种键:值数据

    嗯,我从这样的事情开始:抱着希望,一旦我隔离了包含我想要提取的key:value表单中的数据的行,我就可以执行某种fork,vinstring.gmatch或类似的操作,这样就可以获得两条数据,但当然,它不起作用,尽管我觉得这是一件微不足道的事,我甚至不知道从何开始,总是因为缺乏模式理解。。。提前感谢您的帮助。

  8. windows – Lua – io.open()最多只有2 GB?

    我使用Lua脚本来确定文件大小:但是,这似乎只适用于高达2GB的文件.对于较大的文件,filesize总是为零.io.open有限制吗?如果是这样,我怎么能解决这个问题呢?

  9. Windows Lua可执行

    嗨,我有一个Lua程序(用Lua5.1编写).我在Windows7上,尝试将其转换为可执行文件.到目前为止没有运气.我已经阅读了其他帖子,建议使用srlua这样做,所以我已经下载了它,但我不知道下一步该做什么.我安装了cygwin,因为我知道它是必要的,但我不知道如何使用srlua将lua文件转换为可执行文件.任何帮助将不胜感激.srlua仅作为源分发,因此您必须首先编译它(有关获取免费C编译器的

  10. 在CentOS 6.9 x86_64的OpenResty 1.13.6.1上使用LuaRocks示例

    下面是我阅读春哥OpenResty官网主页中“UsingLuaRocks”一节的实操记录,整理如下。这个思路是可行的。

随机推荐

  1. 【cocos2d-x 3.x 学习笔记】对象内存管理

    Cocos2d-x的内存管理cocos2d-x中使用的是上面的引用计数来管理内存,但是又增加了一些自己的特色。cocos2d-x中通过Ref类来实现引用计数,所有需要实现内存自动回收的类都应该继承自Ref类。下面是Ref类的定义:在cocos2d-x中创建对象通常有两种方式:这两中方式的差异可以参见我另一篇博文“对象创建方式讨论”。在cocos2d-x中提倡使用第二种方式,为了避免误用第一种方式,一般将构造函数设为protected或private。参考资料:[1]cocos2d-x高级开发教程2.3节[

  2. 利用cocos2dx 3.2开发消灭星星六如何在cocos2dx中显示中文

    由于编码的不同,在cocos2dx中的Label控件中如果放入中文字,往往会出现乱码。为了方便使用,我把这个从文档中获取中文字的方法放在一个头文件里面Chinese.h这里的tex_vec是cocos2dx提供的一个保存文档内容的一个容器。这里给出ChineseWords,xml的格式再看看ChineseWord的实现Chinese.cpp就这样,以后在需要用到中文字的地方,就先include这个头文件然后调用ChineseWord函数,获取一串中文字符串。

  3. 利用cocos2dx 3.2开发消灭星星七关于星星的算法

    在前面,我们已经在GameLayer中利用随机数初始化了一个StarMatrix,如果还不知道怎么创建星星矩阵请回去看看而且我们也讲了整个游戏的触摸事件的派发了。

  4. cocos2dx3.x 新手打包APK注意事项!

    这个在编译的时候就可以发现了比较好弄这只是我遇到的,其他的以后遇到再补充吧。。。以前被这两个问题坑了好久

  5. 利用cocos2dx 3.2开发消灭星星八游戏的结束判断与数据控制

    如果你看完之前的,那么你基本已经拥有一个消灭星星游戏的雏形。开始把剩下的两两互不相连的星星消去。那么如何判断是GameOver还是进入下一关呢。。其实游戏数据贯穿整个游戏,包括星星消除的时候要加到获得分数上,消去剩下两两不相连的星星的时候的加分政策等,因此如果前面没有做这一块的,最好回去搞一搞。

  6. 利用cocos2dx 3.2开发消灭星星九为游戏添加一些特效

    needClear是一个flag,当游戏判断不能再继续后,这个flag变为true,开始消除剩下的星星clearSumTime是一个累加器ONE_CLEAR_TIME就是每颗星星消除的时间2.连击加分信息一般消除一次星星都会有连击信息和加多少分的信息。其实这些combo标签就是一张图片,也是通过控制其属性或者runAction来实现。源码ComboEffect.hComboEffect.cpp4.消除星星粒子效果消除星星时,为了实现星星爆裂散落的效果,使用了cocos2d提供的粒子特效引擎对于粒子特效不了

  7. 02 Cocos2D-x引擎win7环境搭建及创建项目

    官网有搭建的文章,直接转载记录。环境搭建:本文介绍如何搭建Cocos2d-x3.2版本的开发环境。项目创建:一、通过命令创建项目前面搭建好环境后,怎样创建自己的Cocos2d-x项目呢?先来看看Cocos2d-x3.2的目录吧这就是Cocos2d-x3.2的目录。输入cocosnew项目名–p包名–lcpp–d路径回车就创建成功了例如:成功后,找到这个项目打开proj.win32目录下的Hello.slnF5成功了。

  8. 利用cocos2dx 3.2开发消灭星星十为游戏添加音效项目源码分享

    一个游戏,声音也是非常的重要,其实cocos2dx里面的简单音效引擎的使用是非常简单的。我这里只不过是用一个类对所有的音效进行管理罢了。Audio.hAudio.cpp好了,本系列教程到此结束,第一次写教程如有不对请见谅或指教,谢谢大家。最后附上整个项目的源代码点击打开链接

  9. 03 Helloworld

    程序都有一个入口点,在C++就是main函数了,打开main.cpp,代码如下:123456789101112131415161718#include"main.h"#include"AppDelegate.h"#include"cocos2d.h"USING_NS_CC;intAPIENTRY_tWinMain{UNREFERENCED_ParaMETER;UNREFERENCED_ParaMETER;//createtheapplicationinstanceAppDelegateapp;return

  10. MenuItemImage*图标菜单创建注意事项

    学习cocos2dx,看的是cocos2d-x3.x手游开发实例详解,这本书错误一大把,本着探索求知勇于发现错误改正错误的精神,我跟着书上的例子一起调试,当学习到场景切换这个小节的时候,出了个错误,卡了我好几个小时。

返回
顶部