Cómo llamar a lua en el código cocos2d c y explorar
Cómo llamar a lua en código cocos2d c
Agregado en AppDelegate
#include "Lua_extensions_CCB.h"
#include "CCLuaEngine .h"
#include "Lua_web_socket.h"
Encuentra el código para cargar el motor de script lua
Motor de registro original oficial
CCLuaEngine*pEngine=CCLuaEngine::defaultEngine();
CCScriptEngineManager::sharedManager()-gt;setScriptEngine(pEngine);
lua relacionado con ccb
CCLuaStack*pStack=pEngine-gt; getLuaStack();
lua_State*tolua_s=pStack-gt; getLuaState();
tolua_extensions_ccb_open(tolua_s);
lua relacionado con web_socket
pStack=pEngine-gt; getLuaStack();
tolua_s=pStack-gt; getLuaState();
tolua_web_socket_open (tolua_s) ;
pEngine-gt; ejecutarScriptFile("luaScript/controller.lua");
Fin
Abre luaScript/controller.lua y estúdialo detenidamente
p>-- evitar pérdida de memoria
collectgarbage("setpause", 100)
collectgarbage("setstepmul", 5000)
require"luaScript / mainMenu"
----------------
-- ejecutar
escena local =CCScene: crear()
escena: addChild(CreateTestMenu())
CCDirector:sharedDirector(): runWithScene(scene)
Si está familiarizado con cocos2dx, estará familiarizado con este punto.
¡No está mal, aquí está la diferencia entre usar Lua en cocos2d y llamarlo en C!
Pero aún no ha terminado
¡La encapsulación de Lua de Cocos2dx es muy buena!
Si no está familiarizado con el código vinculante de cy lua, no se recomienda leer el siguiente código.
El portal vinculante de cy lua
Acerca del enlace cocos2d y lua Exploración de ciertos códigos
//Abrir "CCLuaEngine.h"
Implementación de instancia única de CCScripEngineProtocol
Más tarde, otros motores de script además de Lua debería ser compatible
p>
Hay muchos métodos en el archivo de encabezado
Elija uno y eche un vistazo
virtualintexecuteNodeEvent(C
CNode*pNode, intnAction);
intCCLuaEngine::executeNodeEvent(CCNode*pNode, intnAction)
{
intnHandler=pNode-gt;getScriptHandler();
if(!nHandler)return0;
switch(nAction)
{
casekCCNodeOnEnter:
m_stack -gt; pushString("entrar");
romper;
casekCCNodeOnExit:
m_stack-gt;
romper;
casekCCNodeOnEnterTransitionDidFinish:
m_stack-gt; pushString("enterTransitionFinish");
romper;
casekCCNodeOnExitTransitionDidStart:
m_stack-gt; pushString("salirTransitionStart");
romper;
casekCCNodeOnCleanup:
m_stack-gt; limpieza");
romper;
predeterminado:
return0;
}
intret=m_stack- gt; ejecutarFunctionByHandler(nHandler, 1);
m_stack-gt;
returnret
}
Aquí está Procesamiento de algunas funciones de mensajes después de ingresar a CCNode
No importa
intret=m_stack-gt; ejecutarFunctionByHandler(nHandler, 1);
Finalmente regresó a CCLuaStack / p>
Se llama ejecutarFunctionByHandler(nHandler, 1);
Continuar explorando
intCCLuaStack::executeFunctionByHandler(intnHandler, intnumArgs)
{ p >
intret=0;
if(pushFunctionByHandler(nHandler)) /* L: ... arg1 arg2 ... func */
{
if(numArgsgt; 0)
{
lua_insert(m_state, -(numArgs 1)); /* L: ... func arg1 arg2 ... */
}
ret=executeFunction(numArgs);
}
lua_settop(m_state, 0);
returnret;
}
Puedes ver algunos códigos relacionados con lua y c
>
Mira la inicialización de esta clase
boolCCLuaStack::init(void)
{
m_state=lua_open();
luaL_openlibs(m_state);
tolua_Cocos2d_open(m_state);
toluafix_open(m_state);
// Registra nuestra versión de la "impresión" global función
constluaL_regglobal_functions[]={
{"print", lua_print},
{NULL, NULL}
};
p>
luaL_register(m_state, "_G", funciones_globales);
tolua_CocoStudio_open(m_state);
#if(CC_TARGET_PLATFORM==CC_PLATFORM_IOS|| CC_TARGET_PLATFORM==CC_PLATFORM_MAC)
CCLuaObjcBridge::luaopen_luaoc(m_state);
#endif
register_all_cocos2dx_manual(m_state);
register_all_cocos2dx_extension_manual( m_state);
register_all_cocos2dx_studio_manual(m_state);
// agregar cargador cocos2dx
addLuaLoader(cocos2dx_lua_loader);
returntrue; p>
}
El nombre del método aquí debería ser registrar la clase en coco2dx en
C
register_all_cocos2dx_manual(m_state); p>
register_all_cocos2dx_extension_manual (m_state);
register_all_cocos2dx_studio_manual(m_state);
Mira en detalle
Coco2dx-studio, no lo mires todavía
Archivo de encabezado
lua_cocos2dx_manual.h
#ifdef__cplusplus
extern"C"{
#endif
#include"tolua .h "
#ifdef__cplusplus
}
#endif
LUA_APIintregister_all_cocos2dx_manual(lua_State* tolua_S);
Archivo de encabezado
lua_cocos2dx_extensions_manual
#ifdef__cplusplus
extern "C"{
#endif
#include"tolua.h"
p>
#ifdef__cplusplus
}
#endif
LUA_APIintregister_all_cocos2dx_extension_manual(lua_State*tolua_S);
Sorprendentemente similar
p>
Mira tolua.h
La verdad pronto saldrá a la luz
lua se define aquí para que se utilicen todas las funciones
Aquí está el encabezado,
/* tolua
** Código de soporte para enlaces Lua.
** Escrito por Waldemar Celes
** TeCGraf/PUC-Rio
** Abril de 2003
** $Id: $
*/
/* Este código es software gratuito; puede redistribuirlo y/o modificarlo.
** El software proporcionado a continuación se proporciona "tal cual" y
** el autor tiene no hay obligación de proporcionar mantenimiento, soporte, actualizaciones,
** mejoras o modificaciones.
*/
Resulta que tolua también es una biblioteca de funciones encapsulada en lua El maestro lo escribió en abril de 2003
Bastante impresionante
Bueno, solo miré el archivo de encabezado de lua_cocos2dx_extensions_manual.h
También miramos. los detalles del archivo cpp
Encontré que algunas funciones estaban registradas
pero no todas
En CCLuaStack::init()
método también existe
tolua_Cocos2d_open(m_state );
Este método
El archivo de encabezado correspondiente es LuaCocos2d..h
Puedes abrirlo para ver los detalles
Luacocos2d..cpp Registra n número de funciones
El registro que uso es relativo a lua
Luacocos2d.cpp tiene mucho código
Los niños interesados pueden echar un vistazo
p>
Parece que cuándo es el momento de echar un vistazo al código de cocos2d studio
Manténgase al día con el ritmo de los tiempos
No siempre se puede ser constructor de cocos