Hola estoy haciendo un pequeño juego y necesito poner el menú de pausa al presionar start y me gustaría que resaltara el menú de pausa usando el screen:clear en color negro pero que no quede totalmente negro. Osea que quede transparente algo como la imagen de abajo:
PD. Estoy pregramando en Lua HM7.
Lo que quiero hacer es que al presionar start me aparezca el menú en la pantalla pero que no cubra totalmente al juego sino que quede transparente.
EDITO: Ya he logrado que el menú se quede ne pantalla y salir de el al juego al menu principal en fin ese no es el motivo por el que dejo esto.
El motivo real es que al presionar start me imprime el menu pero tambien la imagen del juego y así esta (parpadeando entre una y otra) y yo quiero que me imprima el menu de pause y nada más.
Cuando digo parpadeando es que me imprime las pantallas por micras de segundo.
Les dejo el código:
--Funcion Pause--
function Pausar()
currentp = 1
screen:clear()
screen:blit(0,0,pausa)
if menupausa == false then
menupausa = true
end
if menupausa == true then
menupausa = false
end
if menupausa == true then
screen:clear()
screen:blit(0,0,pausa)
end
while true do
pad = Controls.read()
if currentp == 1 then
screen:fontPrint(krist1,30,60,"Continuar",rojo)
screen:fontPrint(krist1,30,100,"Reiniciar",negro)
screen:fontPrint(krist1,30,140,"Salir",negro)
end
if currentp == 2 then
screen:fontPrint(krist1,30,60,"Continuar",negro)
screen:fontPrint(krist1,30,100,"Reiniciar",rojo)
screen:fontPrint(krist1,30,140,"Salir",negro)
end
if currentp == 3 then
screen:fontPrint(krist1,30,60,"Continuar",negro)
screen:fontPrint(krist1,30,100,"Reiniciar",negro)
screen:fontPrint(krist1,30,140,"Salir",rojo)
end
screen.flip()
if pad:up() and oldpad:up() ~= pad:up() then
currentp = currentp - 1
end
if pad:down() and oldpad:down() ~= pad:down() then
currentp = currentp + 1
end
if currentp == 0 then
currentp = 3
end
if currentp == 4 then
currentp = 1
end
if currentp == 1 and pad:cross() and oldpad:cross() ~= pad:cross() then
break
end
if currentp == 3 and pad:cross() and oldpad:cross() ~= pad:cross() then
dofile("ms0:/PSP/GAME/El Ahogado/System/Menu.lua")
end
screen.waitVblankStart()
screen.flip()
oldpad = pad
end
end
--Fin Función--
if pad:start() then
Pausar()
end
screen.waitVblankStart()
screen.flip()
oldpad = pad
end
Creo que el problema es que ambos bucles tienen:
screen.waitVblankStart()
screen.flip()
pero si se lo quito a alguno ya no me muestra el menu o el juego.
Ups, leí todos los
Ups, leí todos los comentarios salvo ese :p bueno, que se le va a hacerXD
Saludos
PD: Ni se os ocurra pensar que lo hago por escenebitos...
¡Iníciate en Linux fácilmente! Sólo entra aquí y comprueba que distribución se adapta mejor a tí.
Mi review: iPod Touch 4G
Volvemos a lo mismo
Mantengamos los foros ordenados, si le vas a responder a alguien usa la opcion responder, ais quedara todo mas entendible.
Un saludo coder.
Manual del Perfecto Votante Para un voto libre y justo!.
TheGCProjects
if menupausa == false
if menupausa == false then
menupausa = true
end
if menupausa == true then
menupausa = false
end
Esta parte del código esta mal porque va alternando la una con la otra y la verdad, a mi parecer , sobra esa parte. Eliminala y dime que pasa.
SAldudos
¡Iníciate en Linux fácilmente! Sólo entra aquí y comprueba que distribución se adapta mejor a tí.
Mi review: iPod Touch 4G
lol
has puesto lo mismo que yo hace un tiempo más abajo. :P
Código
Puedes pegar el código modificado, porque si sigues teniendo en tu código:
if menupausa == false then
menupausa = true
end
if menupausa == true then
menupausa = false
end
Es que no me has hecho caso, y vamos que para eso ni me sigo molestando. Ademas cuando arregles algo di QUE ERA LO QUE FALLABA, así nos enteramos todos.
LuaDiE: Crea en Lua sin teclear código. Compatible HM7, HMv2, LuaPlayer, LuaDEV y PGE.
Prueba...
Ha que la función sea asi (esto solo si lo demas no te va)
function pause()
while true do
funcion pause
end
Por cierto, para imprimir y que salgan varios colores usa esto mejor
if opcion == 1 then
screen:print(texto, blanco)
else
screen:print(texto, negro)
if opcion = 2 then ...
Saludos.
10 goto 10
function pause()
while true do
funcion pause
end
Eso es un bucle infinito ¬¬
No se si me expliqué bien.
Por ejemplo en el codigo pones:
if pad:start() then menupause()
function menupause()
while true do
funcion pause (me refiero, todo lo que tenga la pause, imprimir imagenes etc.
if pad:start() break
end
end
Tambien se puede escribir
Tambien se puede escribir asi:
if pad:cross() then
if menupausa =true then
menupausa = false
else
menupausa = true
end
end
¡Iníciate en Linux fácilmente! Sólo entra aquí y comprueba que distribución se adapta mejor a tí.
Mi review: iPod Touch 4G
Pues
Entre los parentesis del screen:clear() pon la variable que contiene el color del que quieres que se ponga el fondo, de esta dos formas.
screen:clear(negro) -- siempre y cuando exista la variable ''negro'' que contenga ese color.
screen:clear(Color.New(0,0,0)) -- asi tambien se puede, creo.
Saludos.
Manual del Perfecto Votante Para un voto libre y justo!.
TheGCProjects
Consejos de programación
Bueno, he mirado tu codigo un poco por encima, y he visto una cosa que no tiene sentido
if menupausa == false then
menupausa = true
end
if menupausa == true then --(1)
menupausa = false
end
Con esas lineas si menupausa al entrar ahí vale false, al salir de esas lineas seguirá valiendo false, porque aunque tu lo pongas en true, al llegar a "(1), lo vuelves a poner a false porque se cumple la condición.
¿Qué es lo quieres, que si vale false valga true y viceversa?. Entonces pon sólo :
menupausa = not menupausa
No sé si esta linea es válida en lua, pero aunque sea otra sintaxis las 6 lineas que tienes se resumen en esa (aparte de que esta funciona).
También repites mucho código, por ejemplo en los "screen:fontPrint", que tecleas lo mismos 3 veces (una por opción). ¿Imaginas que tienes 20 opciones?, es mejor cambiar el valor sólo de los colores y hacerte una función (recuerda divide y venceras) que te muestre los "screen.fontPrint". Pero bueno, eso es metodología, estudio, prueba y paciencia, pero cuando antes se empieze a hacer mejor, que luego cuesta mucho quitar los malos hábitos.
Te digo esto como consejo, no pretendo ofenderte. Un saludo.
LuaDiE: Crea en Lua sin teclear código. Compatible HM7, HMv2, LuaPlayer, LuaDEV y PGE.
Mmm..
Y la solución al problema?
Pues que debes...
Hacer algo como esto:
If pad:cross() then
if menupausa == false then
menupausa == true
end
end
if pad:cross() then
if menupausa == true then
menupausa == false
end
end
Debes hacer algo como eso, despus de presionar un boton pausa es true, peor si lo presionas de nuevo pausa es false.
espero hayas entendido, saludos.
Manual del Perfecto Votante Para un voto libre y justo!.
TheGCProjects
Resumiendo
Ese código que has puesto, se puede resumir en una linea:
if pad:cross() then menupausa = not menupausa
En LUA
No se puede hacer eso de Menupausa = NOT MENUPAUSA.
Lo que eta en mayuscula, dudo que se pueda hacer en LUA.
Un saludo.
Desde luego que se puede
...y tanto que sí, que not es operador de Lua.
Y a ver si miráis la documentación antes de decir chorradas o inventaros TONTERÍAS...
Lo que no funcionaría es lo que TÚ decías, porque te confundes entre el operador de asignación (=) y el de comparación de igualdad (==).
Strength is irrelevant. Resistance is future. We wish to improve ourselves.
La fuerza es irrelevante. La resistencia es futuro. Queremos mejorarnos.
Jejeje
See, se que esta mal, pero es solo un ejemplo, nunca dije que seria funcional, se que not es un operador de LUA, y lo de not menu pause, pues crei que no se podia, pues no he visto que se haga una asiganacion asi menupause == not menupause. Y si lees bien, dije que dudo que se pueda ;).
Pero si lo he visto asi ''if not menupause...''
De todas formas, gracias por resolverme la duda.
Un saludo.
Manual del Perfecto Votante Para un voto libre y justo!.
TheGCProjects
Desde luego que no lo verás...
...porque == es operador de comparación, no de asignación.
Que, si hubieras leído bien, ya lo sabrías.
Y cualquiera sabe que lo que haya visto, y lo que exista, son cosas diferentes. ¿Verdad que tú no has visto nunca
setmetatable
? Y sin embargo, es un comando fundamental de Lua. Del Lua "de verdad", el orientado a objetos, no el que controla el flujo del programa con "oldpad~=pad".Así que, si lees bien, verás que lo que te estoy diciendo es que si vas a aportar algo, lo hagas; pero si te vas a limitar a jugar a los dardos en programación, y soltar cosas a bulto, sin tener ni puñetera idea, y "dudo" y "creo", en tus mensajes, significan "No tengo ni puñetera idea, pero lo primero que se me pasa por la cabeza es X", para eso, mejor no digas nada. Porque entonces solo haces que estorbar. Porque lo que hayas visto, simplemente, tampoco es relevante, menos aún si has sido incapaz de entenderlo.
Espero que ahora lo hayas entendido de verdad, de veras.
Strength is irrelevant. Resistance is future. We wish to improve ourselves.
La fuerza es irrelevante. La resistencia es futuro. Queremos mejorarnos.
Perdona la ingorancia pero dudo...
menu = not menu
Exactamente hace que menu sea falso o sea nil?
O hace otra cosa?
Saludos.
Operador de negación
El operador de negación
not X
devuelve el valor booleano opuesto a cómo evalúe X.Nil y false evalúan ambos como false; cualquier otra cosa, como true. Así, si
menu
tiene algún valor distinto afalse
(es 1, es true, es una tabla...), not menu devuelve false. Si menu es false o nil, devuelve true.A efectos prácticos, si consideramos que un booleano es un "interruptor" que está encendido o apagado, hacerle un not significa "ponerlo del otro modo en que esté". Como un botón de pausa: si está pausado, se reproduce; si está reproduciendo, pausa :).
Strength is irrelevant. Resistance is future. We wish to improve ourselves.
La fuerza es irrelevante. La resistencia es futuro. Queremos mejorarnos.
Ok Gracias por la aclaración.
Not lo que hace es lo que dice la palabra, Que X NO sea X, darle el valor contrario.
Por cierto, tu has programado algun homebrew para la PSP en Lua? Porqué eres de los pocos que veo que si ENTIENDE de programación Lua.
Saludos :).
Te entendi
Desde el primer mensaje te entendi perfectamente, si he visto el setmetatable, en algunos codigos, lo que hace es establecer la metatabla dada, no le se usar ni lo he usado.
Lo de Oldpad, muchos creen que oldpad es una funcion dle LuaPlyer y no es asi, es solo una variable, se puede usar cualquiero otro nombre como previouspad, antpad o lo que sea.
No se a que te refieres con lo de X, pero si es por el ejemplo, pues es solo un ejemplo, solo quize darle una idea de lo que tenia que hacer.
Otra cosa, no se si es cosa mia o que pero creo que te sientes molesto, disculpame si te hice algo pero yo solo queria ayudar, ahora bien si te molesta pues no me hace sentir mal que me lo digas.
Se que no soy el mejor y ni quiero sentirme el mejor, peor no se por que te pones asi si yo nisiquiera te he dicho nada para molestarte.
Un saludo.
Manual del Perfecto Votante Para un voto libre y justo!.
TheGCProjects
Vaya, eso es muy sencillo,
Vaya, eso es muy sencillo, una variable cualquiera y un valor. Si es un valor es el juego, si es otro es pausa.
saludos
Ese ultimo comentario de
Ese ultimo comentario de pspgorrister no lo entendi asi que , os muestro un codigo pequeño para que lo adapte a su juego y ya.
negro = Color.new(0,0,0,25)
imagenmenup = Image.load("menupausaimagen.png")
menupausa = false
oldpad = Controls.read()
...
while true do
screen:clear()
pad = Controls.read()
...
if pad:select() and oldpad:select() ~= pad:select() then
menupausa = true
end
if menupausa = true then
screen:clear(negro)
Image:load("x,y,imagenmenup")
end
...
Screen.waitVblankStart()
oldpad=pad
end
-----------------------------------------------
Y bueno seria asi, y si hay algun error que alguien me lo dige porque llevo sin programar desde septiempbre.
Saludos
¡Iníciate en Linux fácilmente! Sólo entra aquí y comprueba que distribución se adapta mejor a tí.
Mi review: iPod Touch 4G
Pss..
Me ha funcionado excepto que:
- No me muestra transparencia (uso LuaHM7 no se si eso importe).
- Si lo pongo con pad:start() and oldpad:star() ~=pad:start() solo me aparece el menú por micras de segundo se borra.
- Si lo pongo solo pad:start() then me lo muestra solo si lo tengo presionado.
Lo que necesito es una funcion para los botones que me lo muestre y se quede asi.
Tutorial: Fabricando nuestro propio micrófono para la PSP.
Exclusivo de PSP.Scenebeta.com
Quizas lo que haces mal es...
Que haces,
Cuando se pulse ese boton, imprime esta imagen.
Tienes que activar el menú y desactivarlo mediante una boolean.
Menu = false.
Cuando se pulse ese boton i menu sea false then menu = true, sinó, menu = false.
si menu = true, imprime tal imagen.
Espero que lo hayas entendido así y haber si este es el problema, sinó dimelo.
Pss...
Ya lo he hecho:
Tengo una que es:
menupausa = false
Y los controles están así:
--Pause--
if pad:start() and menupausa == false then
menupausa = true
end
if menupausa == true then
screen:clear()
screen:blit(0,0,pausa)
end
if menupausa == true and pad:start() then
menupausa = false
end
Pero solo me muestra el menu si tengo presionada la tecla..
Vi en los foros de prgramación de Dark_AleX que poniendo:
if pad:start() and pad~=prevpad then
Debería de funcioner pero no me sirve.
Tutorial: Fabricando nuestro propio micrófono para la PSP.
Exclusivo de PSP.Scenebeta.com
Divide y vencerás
Lo que entreveo por el trozo ese de código es que estás creando un "megabucle" con todo el código en un bucle principal.
No sería mejor una especie de:
if pad:start() then
MiFuncionDePausa()
end
Y luego en tu función de pausa haces lo de mostrar la imagen y otro bucle que esté leyendo las teclas hasta que se vuelva pulsar start (o la tecla que tu quieras para salir de la pausa).
De esta forma no tienes que usar ninguna variable y tu código ganará en legibilidad. Es bueno dividir el código en funciones.
No sé si me entiendes lo que quiero decir...
LuaDiE: Crea en Lua sin teclear código. Compatible HM7, HMv2, LuaPlayer, LuaDEV y PGE.
Mmm..
Ya he creado mi función y pongo el código tal y como me lo dices y me va igual.
Re:
A lo mejor es porque el valor de la tecla sigue siendo el valor "start" y en la primera comparación se sale. Prueba a resetearlo primero y luego hacer la comparación en un bucle. Una cosa estilo:
pad = 0
while not pad:start() do
pad = Controls.read()
end
LuaDiE: Crea en Lua sin teclear código. Compatible HM7, HMv2, LuaPlayer, LuaDEV y PGE.
Yo aocustumbro a usar el
Yo aocustumbro a usar el ~=prevpad que aunke viene a ser lo mismo k lo de oldpad, es mas sencillo y me funciona bien (en el bucle principal has de añadir prevpad = pad para k vaya bien).
Por cierto, no se si te ekivocaste al escribir, pero revisa el codigo de antes porke pusiste pad:start() and oldpad:STAR() ~=pad:start()
http://widigunz.es
Si..
Descuida lo escribi en el editor de scenebeta y me equivoque. ;)
Prueba...
If pausa == true then
repeat
screen:blit (imagen)
until pad:start()
Saludos.
Mmm..
Ya lo he probado y me va igual, tengo que mantener pulsado para que aparezca :S
Un saludo!
Viendo aquí en beta he encontrado esto pero no le entiendo muy bien. Y me pregunto si ahí hay algo que me sirva y si me lo pueden esxplicar mejor ;)
Tutorial: Fabricando nuestro propio micrófono para la PSP.
Exclusivo de PSP.Scenebeta.com
eso seria muy complicado y
eso seria muy complicado y no mereceria la pena porque se ralentizaria mucho cuando capturas, mejor haz lo que te dije yo que lo he usado y funciona.
Saludos
¡Iníciate en Linux fácilmente! Sólo entra aquí y comprueba que distribución se adapta mejor a tí.
Mi review: iPod Touch 4G
¿Te refieres a no usar un buffer?
¿Entonces cómo restauras los colores de la pantalla?
Y ya no sólo los colores, sinó el contenido que hay debajo del menú pausa
PD: Cuando digo buffer, lo hago en el sentido genérico, supongo que Lua tendrá alguna método "tipo flip" que automatice eso.
LuaDiE: Crea en Lua sin teclear código. Compatible HM7, HMv2, LuaPlayer, LuaDEV y PGE.
Mmm..
¿Qu no haý funciones de pausa dedicadas a eso?
Que función quiere decir?
La única funcion que recuerdo del lua HM para pausar un juego es esa de Screen.vwait o algo así, pero él juego estaría pausado, no podrías hacer nada mas.
ejemplo:
if pad:cross() then
repeat
la funcion de pausa
until pad:circle()
Saludos.
Tambíen puedes hacer que cuando pulses tal boton pase una variable de false a true.
if pause == false then
juego()
else
pausa()
end
pudes hacer qu eal presior
pudes hacer qu eal presior start haga una capura añadiendo menu pausa
mmm...
Yo no se como va eso pero...
de que va el juego???
esta chuloo???
lo vas a temrinar pronto???
ocupa mucho???
xD
Por la imagen que puso...
Creo que se ve claro que es el ahorcado xD.
otro metodoes poner un
otro metodoes poner un screen:clear(negro)
teniendo en cuenta que negro = Color.new(0,0,0,50) El 4º valor es alpha.
Saludos
Mmm..
Bien probare con eso ;)
Re
Yo no conozco las funciones Lua, así que no sabía que el clear admitía canal alfa, entonces te ahorras una imagen, al final quedaría así
LuaDiE: Crea en Lua sin teclear código. Compatible HM7, HMv2, LuaPlayer, LuaDEV y PGE.
Menu
Tienes que crearte una imagen oscura (con un sólo color) del tamaño de la pantalla y darle un canal alfa de transparecia un poco opaco.
Luego:
LuaDiE: Crea en Lua sin teclear código. Compatible HM7, HMv2, LuaPlayer, LuaDEV y PGE.