Quick-cocos2d-x如何修改系统原有导出类的函数

Quick-cocos2d-x如何修改系统原有导出类的函数,第1张

概述这里的系统导出类主要是指Sprite、Image这种cocos2dx lua默认就导出的类,有时候部分cocos2dx c++对应类的接口并没有导出,这就需要我们自己添加导出函数。相比于自定义类的导出,要简单不少。 首先确定这些类的导出定义在工程中的\frameworks\cocos2d-x\cocos\scripting\lua-bindings\auto\lua_cocos2dx_auto.c 这里的系统导出类主要是指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如何修改系统原有导出类的函数全部内容,希望文章能够帮你解决Quick-cocos2d-x如何修改系统原有导出类的函数所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1057518.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存