Lua oop
El libro Cómo hacer un RPG utiliza Lua. Lua es un popular lenguaje de programación que se utiliza ampliamente en la industria del juego. A menudo está incrustado en un programa anfitrión. En el caso de los juegos, el programa anfitrión es el motor del juego, normalmente escrito en C++, y la jugabilidad se controla con scripts de Lua.
Diferentes lenguajes utilizan diferentes paradigmas para resolver problemas. Un paradigma de programación es la filosofía particular que emplea un lenguaje para resolver un problema. Ciertos problemas son más fáciles cuando se utiliza un paradigma particular. La gran mayoría de los juegos utilizan la programación orientada a objetos, también conocida como POO. C++ es un lenguaje orientado a objetos. Lua no lo es. Lua es un lenguaje multi paradigmático. Esto significa que si queremos hacer que Lua funcione como un lenguaje OOP tenemos que escribir nuestro propio framework.
Los juegos están llenos de cosas con propiedades compartidas: monstruos, objetos, niveles, sistemas de partículas, menús, etc. Estos son candidatos naturales para las clases, pero Lua no tiene un sistema de clases y por lo tanto debemos escribir uno.
Llevas las maletas a la oficina de equipajes, se las das a un hombre y te devuelven un billete de reclamación. Entonces te quedas sin maletas y puedes disfrutar de un cangrejo peludo e ir a ver el Merlion. Más tarde, le das al hombre tu billete de reclamación y te devuelve las maletas.
Lua __index
Puedes notar que falta __index. Ese metamétodo está reservado para la librería y no puede ser utilizado. En middleclass 1.x había una manera de evitar esto (a través de un mixin) pero por ahora no recomiendo usar este metamétodo con las clases. Probablemente será mejor usar una tabla de Lua pura en su lugar, si lo necesita.
Nota sobre Lua 5.2: Esta nueva versión de Lua añade soporte para 3 nuevos metamétodos __len, __pairs y __ipairs. Estos métodos están ahora también incluidos en midleclass. Pero necesitarás ejecutar Lua 5.2 (o Luajit compilado con la bandera DLUAJIT_ENABLE_LUA52COMPAT) para poder utilizarlos.
Los mixins pueden proporcionar una función especial llamada ‘included’. Esta función será invocada cuando el mixin se incluya en una clase, permitiendo al programador realizar acciones. Los dos únicos parámetros son el mixin (normalmente implícito) y la clase.
Lo más sencillo es preceder los atributos con guiones bajos. De hecho, esto está escrito en la referencia de Lua 5.1, sección 2.1, «Conversiones léxicas», como una forma de decir «esto está aquí, pero por favor no lo uses».
Herencia Lua
Lua es un lenguaje de programación de extensión diseñado para soportar la programación procedimental general con facilidades de descripción de datos. También ofrece un buen soporte para la programación orientada a objetos, la programación funcional y la programación basada en datos. Lua está pensado para ser utilizado como un potente y ligero lenguaje de configuración para cualquier programa que lo necesite. Lua se implementa como una biblioteca, escrita en C limpio (es decir, en el subconjunto común de ANSI C y C++). También es un lenguaje realmente pequeño, menos de 6000 líneas de código, que se compilan en <100 kilobytes de código binario. Se puede encontrar en http://www.lua.org
Esto crea un archivo fuente C/C++ example_wrap.c o example_wrap.cxx. El archivo fuente C generado contiene las envolturas de bajo nivel que necesitan ser compiladas y enlazadas con el resto de su aplicación C/C++ para crear un módulo de extensión.
El nombre del archivo wrapper se deriva del nombre del archivo de entrada. Por ejemplo, si el archivo de entrada es example.i, el nombre del archivo wrapper es example_wrap.c. Para cambiar esto, puede utilizar la opción -o. El módulo envuelto exportará una función «int luaopen_example(lua_State* L)» que debe ser llamada para registrar el módulo con el intérprete de Lua. El nombre «luaopen_example» depende del nombre del módulo.
Tabla Lua
Pero no estoy seguro de si a) esa es la forma más estándar y escalable. Sin embargo, parece que funciona para mí. O b) cómo podría hacer la herencia y llamar a las superfunciones de la clase.Así que ¿cuáles son las mejores maneras de tratar con la creación de clases en Lua? 16 commentssharesavehidereport95% UpvotedSort by: best
Esto es crear un nuevo closure para cada método de tu clase cada vez que creas una nueva instancia, lo cual es algo costoso. La ventaja de este método es que puedes tener campos de datos realmente privados:function newObject()
6ReplyShareReportSaveFollowlevel 1 – 9 yr. agoHay un montón de maneras de hacer clases en Lua, y cada uno tiene su propia preferencia, por lo que es realmente hasta usted decide qué rasgos particulares que desea. Por ejemplo, tu método se conoce como «Método de cierre» y tiende a ser el más rápido en rendimiento, pero también el que más memoria ocupa.Mi versión preferida es la de «Copiar metatabla», que tiene este aspecto:– La tabla Foo es la metatabla para todas las instancias