Anuncios Google

[LuaDev] ahora el menu [Solucionado!]

bien, hoy en el descanso del instituto, aprovechando la hora libre que tenia, me he puesto a escribir el codigo para el menu.

mi intención, es que cada vez que pulsemos o abajo o arriba, las frases cambien de color para remarcar cual es la que tenemos seleccionada. Pero no consigo que la variable color cambie a Rojo o Blanco, sumandole o restandole 1.

EDITO! ahora he conseguido arrancarlo, pero no me aparece el menu, este es el mensaje: Attempt to index global nuevapartida (a nil value)

Vuelvo a EDITAR: vale, ya no me da los errores, ahora simplemente no me aparece el menu... T_T

 

Aqui dejo el codigo, haber si alguien me puede ayudar! muchas gracias! :)

 

os.cpu(333)
 
rojo= color.new(255,0,0)
blanco= color.new(0,0,0)
 
font.load("res/fonts/nuevojuego.pgf")
 
 
color= 1
if color== 2 then 
newgame.color= rojo
loadgame.color.color= rojo
extras.color= rojo 
end
if color== 0 then 
newgame.color= blanco
loadgame.color= blanco
extras.color= blanco
 end
 
newgame= {"Nueva partida",color}
loadgame= {"Cargar partida",color}
extras= {"Extras",color}
 
 
 
function letrasmenucolor()
screen.print(270,120,newgame[1],newgame.color)
screen.print(270,100,loadgame[1],loadgame.color)
screen.print(270,80,extras[1],extras.color)
screen.flip()
 
	controls.read()
		newgame.color= color + 1
		loadgame.color= color - 1
		extras.color= color - 1
		screen.flip()
 
	if controls.down() and newgame.color== 2 then
		newgame.color= color - 1
		loadgame.color= color + 1
		extras.color= color - 1
		screen.flip()
 
	elseif controls.up() and newgame.color== 2 then
		newgame.color= color - 1
		loadgame.color= color - 1
		extras.color= color + 1
		screen.flip()	
 
	elseif controls.down() and loadgame.color== 2 then
		newgame.color= color - 1
		loadgame.color= color - 1
		extras.color= color + 1
		screen.flip()
	elseif controls.up() and loadgame.color== 2 then
		newgame.color= color + 1
		loadgame.color= color - 1
		extras.color= color - 1
		screen.flip()
 
	elseif controls.down() and extras.color== 2 then
		newgame.color= color + 1
		cargarpartida.color= color - 1
		extras.color= color - 1
		screen.flip()
	elseif controls.up() and extras.color== 2 then
		newgame.color= color - 1
		loadgame.color= color + 1
		extras.color= color - 1
		screen.flip()
	end
end
 
 
texto = "Bienvenido a Terrachrystalis \n Te espera un gran comienzo"
dofile("RGSplashLib.lua") --libreria splash
 
function textoguay()
	for i=1, texto:len() do
		screen.print(50,50,texto:sub(1,i))
			os.sleep(0.05)
				screen.flip()
end
end
 
textoguay() 
os.sleep(4)
splash("res/splash/bluestartitulo.png",3000,4,"fade")
while true do
 letrasmenucolor() 
 end


En un par de proyectos:

Current: Fantasymind  [||                  ] PROGRESS: 10%

Next: FAR STARS


Twitter: @Cere_Ender


 


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Ponlo así:function

Ponlo así:

function letrasmenucolor()
	screen.print(270,120,newgame[1],0.7,newgame.color,0x0)
	screen.print(270,100,loadgame[1],0.7,loadgame.color,0x0)
	screen.print(270,80,extras[1],0.7,extras.color,0x0)
	newgame.color = color + 1
	loadgame.color = color - 1
	extras.color = color - 1
	if controls.down() and newgame.color== 2 then
		newgame.color= color - 1
		loadgame.color= color + 1
		extras.color= color - 1
	elseif controls.up() and newgame.color== 2 then
		newgame.color= color - 1
		loadgame.color= color - 1
		extras.color= color + 1
	elseif controls.down() and loadgame.color== 2 then
		newgame.color= color - 1
		loadgame.color= color - 1
		extras.color= color + 1
	elseif controls.up() and loadgame.color== 2 then
		newgame.color= color + 1
		loadgame.color= color - 1
		extras.color= color - 1
 
	elseif controls.down() and extras.color== 2 then
		newgame.color= color + 1
		cargarpartida.color= color - 1
		extras.color= color - 1
	elseif controls.up() and extras.color== 2 then
		newgame.color= color - 1
		loadgame.color= color + 1
		extras.color= color - 1
	end
end
 
 
texto = "Bienvenido a Terrachrystalis \n Te espera un gran comienzo"
dofile("RGSplashLib.lua") --libreria splash
 
function textoguay()
	for i=1, texto:len() do
		screen.print(50,50,texto:sub(1,i))
		os.sleep(0.05)
		screen.flip()
	end
end
 
textoguay() 
os.sleep(4)
splash("res/splash/bluestartitulo.png",3000,4,"fade")
while true do
	controls.read()
	letrasmenucolor() 
	screen.flip()
end

EDITADO: Mírate esto: http://psp.scenebeta.com/node/81863#comment-669877


Editado: Crear hilos y comentarios duplicados incumple las Normas de la Comunidad, si necesita cambiar su comentario puede usar la opción de Editar. Antes de volver a postear por favor revise las Normas.| Rober Galarga

Quita las 4 líneas que tienes

Quita las 4 líneas que tienes después de controls.read en tu función letrasmenucolor, y prueba de nuevo.

Imagen de Cere_Ender

no, no me aparece nada, se me

no, no me aparece nada, se me queda la pantalla en negro...

quiza sea por el while true do o algo asi?

Imagen de Ayrton990

Descartar lo del while true

Descartar lo del while true do pues todo lo que necesite estar en bucle ya lo tienes en la función y la función la tienes ubicada en el while true do


Administrador de www.SceneBeta.com y Android

La verdad es que me cuesta

La verdad es que me cuesta trabajo comprender tu code... te complicas mucho =/
Te dejo un pequeño menu, más sencillo, para que lo tomes de guía:

opciones = {"Opción 1","Opción 2","Opción 3"} --Agregar las funciones que gustes
	colores = {rojo=0xFF0000FF} --Igual... agregar los que gustes (el blanco no, porque es el color por default)
		sel = 1 --Variable para moverme por el menu
 
function mostrar_menu(focussed)
	local y = 80   --Aquí se inician a imprimir las opciones
		for i=1,#opciones do  --para imprimir las opciones, según el color que les toque
			if focussed == i then 
				screen.print(270,y,opciones[i],colores.rojo)  --Seleccionada
			else
				screen.print(270,y,opciones[i])   --No seleccionadas
			end
				y = y + 20  --Para que no se empalmen las opciones
		end
end
 
while true do
	controls.read()
		--Tienes un fondo? vale... ponlo aquí xD
			if controls.press("up") and sel > 1 then sel = sel - 1 end  --moverme hacia arriba en las opciones
				if controls.press("down") and sel < #opciones then sel = sel + 1 end --Lo mismo, pero hacia abajo
					mostrar_menu(sel) --Muestro el menu, pasándole la opción que está seleccionada
				--más code? ps aquí lo pones
			--Nada más que hacer, tonces flip:
	screen.flip()
end

Este menu es muy práctico, porque si quieres más opciones sólo tienes que agregarlas en la tabla, sin modificar el resto del code. Si no entiendes algo, pregunta ;)

PD. 0xFF0000FF es lo mismo que color.new(255,0,0), sólo que así se desgasta menos el teclado xD

Imagen de Cere_Ender

entiendo las tablas de

entiendo las tablas de opciones y colores, lo de la variable de la seleccion, pero lo de Focussed, #opciones, y local (que es?), y porque en la frase "if controls.press("up") and sel > 1 then sel = sel - 1 end --moverme hacia arriba en las opciones"

restas?

 

y ahora, si yo quiero que en la opcion seleccionada vaya a un lugar (nuevo juego, cargar partida o pantalla de extras) lo pongo en el while true do no?


En un par de proyectos:

Current: Fantasymind  [||                  ] PROGRESS: 10%

Next: FAR STARS


Twitter: @Cere_Ender


 

ok...

  • focussed: es una variable. Como va dentro de los paréntesis de la función, se le llama "argumento" (te fijas que para imprimir texto con screen.print necesitas mínimo especificar dos números y el texto? Es lo mismo en este caso). focussed sólo se puede usar dentro de la función porque es argumento de la misma, fuera no está definida.
  • opciones en mi code es una tabla, correcto? Pues si antepones un # a una tabla, obtienes el número de elementos que contiene (en el caso del code que dejé, 3)
  • si una variable es declarada como local, sólo se podrá usar en la estructura donde fue declarada (en mi caso, una función). Se puede decir que no es una variable real, porque fuera de la función no está definida.
  • Resto? Pues si xD. Al inicio sel vale 1, porque así lo definí, lo que significa que al principio está seleccionada la opción 1. Si sel vale 2, entonces estoy sobre la opción 2 y así sucesivamente. Si presiono la flecha hacia abajo, sumo 1. Si la presiono hacia arriba, resto 1.
    El "movimiento" se controla con dos condiciones dobles (nota que uso "and"), por qué? Para evitar errores de índice (tratar de acceder a un elemento que no existe en una tabla). Tal y como está el code, sel nunca será menor que 1, ni mayor que 3.

Lo último que mencionas, puedes hacerlo en el while como dices, o se podría definir una función que haga el trabajo sucio por ti (que analice en que opción presionaste un botón, y ejecute un determinado code). Incluso, con otra tabla bastaría... depende de cómo te acomode mejor ;)

Imagen de Cere_Ender

perfecto! pongo este tema en

perfecto! pongo este tema en favoritos! asi me acordaré! :)

muchisimas gracias Rober!

aunque sigo sin comprender bien bien que hace focussed en esta función.


En un par de proyectos:

Current: Fantasymind  [||                  ] PROGRESS: 10%

Next: FAR STARS


Twitter: @Cere_Ender


 

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.