Buen día, comunidad!
Después de un largo tiempo de estar ausente, por fin tengo otro rato libre para comenzar un proyecto, esta vez un shooter 2D y lo sé, será un duro, largo y solitario camino por como están las cosas en la comunidad, sin contar que no hay ports de game engines y api's de físicas para la bonita PSP y claro por la evolución de la internet, ya no es igual que hace 10 años, ¿verdad?. Esta vez, acudo a ustedes por algo de ayuda, pues para el tipo de proyecto es fundamental la POO ya que facilita mucho las cosas pero Lua no pone las cosas de manera fácil, así que tengo un par de dudas respecto a ello, y pues si, Lua no es un lenguaje de programación que domine por lo que no sé si OneLua soporte todas las características del interprete "nativo" de Lua, tales como las metatables, y demás.
Pues estoy tratando de ralizar un menú a modo de pulir mis habilidades en Lua y a la vez de avanzar en proyecto, sin embaro estoy obteniendo errores debido al tratar de acceder a un objeto "nil", siendo más específico en la línea 7 del código "menu.lua". A continuación dejo los fragmentos de código.
Agradeceré cualquier comentario.
-- MenuItem "class"
local MenuItem = { text = "", primary_color = color.new(104, 169, 221), -- Cornflower Blue second_color = color.new(46, 147, 249) -- Dodger Blue } function MenuItem:print(self, x, y, width, height, selected) delta_x = 10 delta_y = screen.textheight() if selected then draw.fillrect(x, y, delta_x, delta_y + 2, self.second_color) draw.gradrect(x + delta_x, y, width, delta_y + 2, self.primary_color, self.primary_color, self.primary_color, self.primary_color) else draw.fillrect(x, y, delta_x, delta_y + 2, self.second_color) draw.gradrect(x + delta_x, y, width, delta_y + 2, self.second_color, self.second_color, self.second_color, self.second_color) end screen.print(x + delta_x + 5, y + 1, self.text) end MenuItem.__index = MenuItem setmetatable(MenuItem, { __call = function (cls, ...) return cls.new(...) end, }) function MenuItem.new(text) local self = setmetatable({}, MenuItem) self.text = text return self end
-- Menu "class"
dofile('modules/menu/menu_item.lua') local Menu = { option = 1, on_menu = false, options = { MenuItem("Play"), MenuItem("Multiplayer"), MenuItem("Settings"), MenuItem("Credits"), MenuItem("Quit") } } function Menu:print() -- Print background if self.on_menu then -- Print Menu delta = 3 title_h = screen.textheight(1) screen.print(5, 20, "Halo Zero", 1, color.white, color.black, __ACENTER) screen.print(5, 20 + title_h + delta, "Firefight", .8, color.white, color.black, __ACENTER) y = 136 text_h = screen.textheight(.8) for i=1, #self.options do self.options[i]:print(5, y + text_h, 100, 10, self.option == i) y = y + text_h + delta end buttons.read() if buttons.down then self.option = self.option + 1 if self.option >= #self.options then self.option = #self.options end elseif buttons.up then self.option = self.option - 1 if self.option <= 0 then self.option = 1 end end if buttons.cross then if self.option == 1 then -- Play elseif self.option == 2 then -- Multiplayer elseif self.option == 3 then -- Settings elseif self.option == 4 then -- Credits elseif self.option == 5 then os.exit() end end else -- Print "press start" txt_size = 1 text = "Halo Zero" text_position = { (480 / 2) - (screen.textwidth()) } txt_size = .8 text = "Press START" text_position = { (480 / 2) - (screen.textwidth(text, txt_size) / 2), -- X 272 - (screen.textheight(txt_size) * 2) } screen.print(text_position[1], text_position[2], text, txt_size, color.white) buttons.read() if buttons.start and not self.on_menu then self.on_menu = true end end end Menu.__index = Menu setmetatable(Menu, { __call = function (cls, ...) return cls.new(...) end, }) function Menu.new(text) local self = setmetatable({}, Menu) return self end
¡Saludos!
--[NO EXISTEN LOS LIMITES =D]--
Ya no me lo espero
hola yo creo que tu juego va a hacer muy bueno (más si sabes programar), ademas si quieres yo te puedo ayudar con los graficos ^^ un saludo y adios
Soy... ¡Super patata¡, tarara-
Hola, alen1235 Agradezco tu
Hola, alen1235
Agradezco tu comentario, eso fortalece el ánimo ;)
Logré hacer funcionar lo que expongo en el tema (parece que me estoy puliendo en el lenguaje rápido jaja), solo que no puedo dejar la solución en el tema debido a que se cargan diversos archivos .lua, y ponerlos así creo que no tendría caso.
Por otro lado, hasta ahora sólo puedo decir que el menú está terminado, y actualmente me encuentro trabajando en el motor de físicas, por lo que me vendría bien un poco de ayuda en la parte gráfica.
Te envío o me envías un mensaje privado para organizarnos.
¡Saludos!
--[NO EXISTEN LOS LIMITES =D]--