首页 > 其他分享 >cocos2dx Lua 版本中无法调用setLastFrameCallFunc

cocos2dx Lua 版本中无法调用setLastFrameCallFunc

时间:2023-08-28 15:37:06浏览次数:39  
标签:function cocos2dx lua Lua ActionTimeline tolua setLastFrameCallFunc


 大坑,大坑



 需要手动修改源码

目录:cocos\scripting\lua-bindings\manual\ui


文件:lua_cocos2dx_ui_manual.cpp


添加:

#include "cocostudio/ActionTimeline/CSLoader.h"
#include "cocostudio/ActionTimeline/CCActionTimeline.h"


static int lua_cocos2dx_ActionTimeline_setLastFrameCallFunc(lua_State* L)
{
	if (nullptr == L)
		return 0;

	int argc = 0;
	cocostudio::timeline::ActionTimeline* self = nullptr;

#if COCOS2D_DEBUG >= 1 
	tolua_Error tolua_err;
	if (!tolua_isusertype(L, 1, "ccs.ActionTimeline", 0, &tolua_err)) goto tolua_lerror;
#endif 

	self = static_cast<cocostudio::timeline::ActionTimeline*>(tolua_tousertype(L, 1, 0));

#if COCOS2D_DEBUG >= 1 
	if (nullptr == self) {
		tolua_error(L, "invalid 'self' in function 'lua_cocos2dx_ActionTimeline_setLastFrameCallFunc'\n", NULL);
		return 0;
	}
#endif 
	argc = lua_gettop(L) - 1;

	if (1 == argc)
	{
#if COCOS2D_DEBUG >= 1 
		if (!toluafix_isfunction(L, 2, "LUA_FUNCTION", 0, &tolua_err))
		{
			goto tolua_lerror;
		}
#endif 

		LUA_FUNCTION handler = (toluafix_ref_function(L, 2, 0));
		self->setLastFrameCallFunc([=](){
			LuaEngine::getInstance()->getLuaStack()->executeFunctionByHandler(handler, 0);
		});

		return 0;
	}


	luaL_error(L, "'setLastFrameCallFunc' function of ActionTimeline has wrong number of arguments: %d, was expecting %d\n", argc, 1);

#if COCOS2D_DEBUG >= 1 
tolua_lerror:
	tolua_error(L, "#ferror in function 'setLastFrameCallFunc'.", &tolua_err);
#endif 
	return 0;
}
static void extendActionTimeline(lua_State* L)
{
	lua_pushstring(L, "ccs.ActionTimeline");
	lua_rawget(L, LUA_REGISTRYINDEX);
	if (lua_istable(L, -1))
	{
		//tolua_function(L, "setFrameEventCallFunc", lua_cocos2dx_ActionTimeline_setFrameEventCallFunc);
		tolua_function(L, "setLastFrameCallFunc", lua_cocos2dx_ActionTimeline_setLastFrameCallFunc);
	}
	lua_pop(L, 1);
}




然后在: register_all_cocos2dx_ui_manual 函数中添加:

extendActionTimeline(L);


最后启动模拟器:即可调用到setLastFrameCallFunc


不要谢我, 我叫雷锋!!

标签:function,cocos2dx,lua,Lua,ActionTimeline,tolua,setLastFrameCallFunc
From: https://blog.51cto.com/u_13566975/7264308

相关文章

  • cocos2dx 绽开效果
    animalNode:setScale(0.1)animalNode:setOpacity(0)localaction1=cc.Spawn:create(cc.ScaleTo:create(0.15,2.0),cc.FadeTo:create(0.15,255))localaction=cc.Sequence:create(action1,cc.DelayTime:create(1.0))......
  • lua如何在游戏中保存上一次游戏状态
    一般在小型单机游戏中会有保存上次玩家的游戏状态,那么该怎么做呢,一般方法会想到利用文件保存。在lua开发中,都以lua文件来配置游戏数据,所以,我们在保存游戏状态的时候,我们也用lua文件作为保存文件。大概流程如下functiongame:load() localf=dofile(filePath)--生成一张表lua......
  • cocos2dx 3.x ClippingNode裁剪图形
    autoclipNode=ClippingNode::create(); clipNode->setInverted(true); clipNode->setAlphaThreshold(0.0f); this->addChild(clipNode,100); autonewLayer=LayerColor::create(Color4B(0,0,0,150));//添加灰色层 clipNode->addChild(newLayer); au......
  • cocos2dx 如何把文件保存到本地
    除了引擎提供的xml文件,之外,我们还可以利用C/C++的文件保存方式保存到本地看例子代码:voidCSaveMsg::setRestStarPoint(constMaxPiectInformation&r_point){ constchar*pPath=g_pUserDefault->getXMLFilePath().c_str(); FILE*pOpen; if((pOpen=fopen("D:a.txt","w......
  • 关于cocos2dx 3.x自适配屏幕
    我在cocos2dx3.x版本,一般会根据自己的图片去设置屏幕尺寸大小,那么如何去设置呢,下面给出具体代码autoglView=Director::getInstance()->getOpenGLView(); if(!glView) { glView=GLViewImpl::create("star"); glView->setFrameSize(640,960); Director::getInstanc......
  • cocos2dx 如何编译android 打包
    先要配置NDK,然后启动CMD命令进入到自己的游戏根目录,我的是starGame,所以如上所示:......
  • cocos2dx TexturePacker加密资源
    TexturePacker最新版本中增加了一个新功能以防止你的产品资源被反编译出来。它被称为ContentProtection,即图片加密。但目前官方只支持Cocos2d-iphone的解密.TexturePacker作者说,不久Cocos2d-x也将集成解密功能.代码已经提交Cocos2d-xgithub官方库。你的app或者游戏仍可以解密数......
  • cocos2dx 3.x打包出现Can't find config file .cocos-project.json in path
    youcanjustcreatea.cocos-project.jsonfileyourself.Allitcontainsisthefollowingcode: {"project_type":"cpp"如果是lua工程话,直接修改成lua即可。......
  • [Lua] 实现所有类的基类Object、模拟单继承OO、实现抽象工厂
    所有类的基类ObjectLua没有严格的oo(Object-Oriented)定义,可以利用元表特性来实现先定义所有类的基类,即Object类。代码顺序从上到下,自成一体。完整代码定义一个空表Object,__index指向其自身(继承将直接使用该表作为对象的元表)Object={}Object.__index=Objectnew定......
  • cocos2dx之多点触屏
    在多点触屏的实现中,我们用到了CCLayer中的:voidccTouchesBegan(CCSet*pTouches,CCEvent*pEvent);voidccTouchesMoved(CCSet*pTouches,CCEvent*pEvent);voidccTouchesEnded(CCSet*pTouches,CCEvent*pEvent);voidccTouchesCancelled(CCSet*pTouches,CCE......