Red de conocimiento informático - Material del sitio web - Cómo llamar a lua en el código cocos2d c y explorar

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

Se llama ejecutarFunctionByHandler(nHandler, 1);

Continuar explorando

intCCLuaStack::executeFunctionByHandler(intnHandler, intnumArgs)

{

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;

}

El nombre del método aquí debería ser registrar la clase en coco2dx en

C

register_all_cocos2dx_manual(m_state);

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