[SOLUCIONADO] PREGUNTA DE PROGRAMACION EN LUA

Hola a todos. me "integré" hace poco en la programacion en LUA y he creado ya TBBD. Ahora estoy trabajando en un nuevo proyecto (cuyo nombre y contenido no revelare hasta que este terminado) y tenia una pregunta entre manos.

¿Como puedo hacer para que, cuando pulse un boton en la PSP, aparezca un mensaje, PERO que no se esconda de nuevo cuando dejo de pulsar, y que vuelva a pulsar el boton y salga otro mensaje pero sin que se mezcle con el anterior?

Gracias al que me responda.

Saludos.


 

 


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.
Imagen de Chimecho

Bueno...

Como te estás iniciando, no seré tan severo xD

Usa variables de estado a como dicen más abajo, ejemplo:

-- Aquí los mensajes a mostrar:
msg1="blablabla1"
msg2="blablabla2"
msg3="blablabla3"
msg4="blablabla4"
 
msg_actual=0 -- Cual mensaje debemos mostrar?, 0 será no mostrar. Esta será nuestra variable de estado
 
oldpad=Controls.read() -- para el control de presionar una sola vez
 
while true do -- bucle infinito
	screen:clear()
	pad=Controls.read()
 
	if pad:cross() and not oldpad:cross() then
		msg_actual=msg_actual+1 -- siguiente mensaje
	end
 
	if msg_actual==1 then
		screen:print(x,y,msg1,color)
	elseif msg_actual==2 then
		screen:print(x,y,msg2,color)
	elseif msg_actual==3 then
		screen:print(x,y,msg3,color)
	elseif msg_actual==4 then
		screen:print(x,y,msg4,color)
	end
 
	oldpad=pad
	screen.flip()
	screen.waitVblankStart()
end

Eso es si no sabes usar arrays, con arrays es mucho más sencillo, mira:

-- array que contendrá los mensajes a mostrar:
msgs={"blablabla1","blablabla2","blablabla3","blablabla4"}
 
msg_actual=0 -- Cual mensaje debemos mostrar?, 0 será no mostrar. Esta será nuestra variable de estado
 
oldpad=Controls.read() -- para el control de presionar una sola vez
 
while true do -- bucle infinito
	screen:clear()
	pad=Controls.read()
 
	if pad:cross() and not oldpad:cross() then
		msg_actual=msg_actual+1 -- siguiente mensaje
	end
 
	if msg_actual>=1 and msg_actual<=#msgs then -- si msg_actual está entre 1 y el número de mensajes, para no salirnos de los límites vamos
		screen:print(x,y,msgs[msg_actual],color) -- imprimes el mensaje que debe imprimirse
	end
 
	oldpad=pad
	screen.flip()
	screen.waitVblankStart()
end

De esta manera puedes tener la cantidad de mensajes que quieras sin que aumente la cantidad de ifs :D

Saludos!



PSP FAT [5.00 M33-6] [6.60 ME] [Hard Moded] / Nintendo Wii [4.1U] [cIOS Hermes] [D2X cIOS] / iPhone 3G [4.2.1] [BB 05.13.04] [redsn0w] / iPod Touch 4 [6.1] [evasi0n]

07/05/10: Tuve el placer de llamarle con todo derecho "N00B" a molotovi xDDD

Recuerda: Sé el intérprete -_-

Ups...

Lo siento. Es que como vi el apartado "DUDAS Y PREGUNTAS", crei que se ponian hay.

Imagen de sting18

Usa current algo asi: current

Usa current algo asi:

current = mensaje1

if pad:cross() and oldpad:cross() ~= pad:cross()  and current == mensaje1 then
current = mensaje2
end

if pad:cross() and oldpad:cross() ~= pad:cross()  and current == mensaje2 then
current = mensaje3
end

if pad:cross() and oldpad:cross() ~= pad:cross()  and current == mensaje3 then
current = mensaje1
end

solo agregas las variables de escribir y pues las acomodas el curren con los botones y mensajes que tu quieras y listo


UFfff

sigo sin entenderlo.

 

Imagen de sting18

ok mira te explico: primero

ok mira te explico:

primero cargas lo que quieres mostrar en pantalla

mensaje1 = screen:print(10,30,"texto",color)

mensaje2 = screen:print(10,30,"texto2",color)

esto es para evitar la doble pulsaccion

oldpad = Controls.read()

haces la funcion

function mensajes()

muestras el primer mensaje al llamar la funcion con current

current = mensaje1

despues esto.

if pad:xxx() and oldpad:xxx() ~= pad:xxx()  and current==mensaje1 then
current=mensaje2
end

Aqui arriba dice que si presionas el boton (tu escoje cual remplasando las xxx) y current es exactamente igual a mensaje1 entonces current va a pasar a mensaje2 y va a mostrar el segundo texto borrando el primero.

si quieres regresar del segundo texto al primero tienes que hacer algo asi.

if pad:xxx() and oldpad:xxx() ~= pad:xxx()  and current==mensaje2 then
current=mensaje1
end

si quieres que despues de mostrar el texto aga otra cosa tienes que ponerla despues del then y antes del texto para que el texto quede arriba de lo que agas algo asi.

if pad:xxx() and oldpad:xxx() ~= pad:xxx()  and current==mensaje1 then

screen:blit(0,0,imagen)
current=mensaje2
end

asi como puse una imagen en el ejemplo puedes poner un sonido o cambiar de script o lo que se te ocurra ya por ultimo cierras la funcion

end

O lo puedes hacer como dice moikop con boleanas un ejemplo primero cargas las variables.

mensaje1 = false

mensaje2 = false

despues haces lo que quieras que pase si lo pones en true tambien lo puedes poner dentro de una funcion para meterlo al bucle.

funcion mensajes()

if mensaje1 == true then

screen:print(10,30,"texto",color)

end

Arriba dice que si mensaje es exactamente igual a true entonces mostrara el mensaje1

if mensaje2 == true then

screen:print(10,30,"texto2",color)

end

lo mismo pero muestra el texto2 y cierras funcion

end

ya solo tienes que poner en true las variables para que las muestre como tu quieras espero y entiendas saludos.


Joooo...

Todavia no lo he conseguido. Mira mi codigo e intenta corregirlo, por favor.


--Variable color y mensajes.

rojo = Color.new(255,0,0)
mensaje1 = screen:print(5,5,"Hola",rojo)
mensaje2 = screen:print(5,5,"¿Como te llamas?",rojo)
mensaje3 = screen:print(5,5,"Davidove, ¿y tu?",rojo)
mensaje4 = screen:print(5,5,"Carlos",rojo)

--Mostrar conversacion.
while true do
pad = Controls.read()
oldpad = Controls.read()
screen.waitVblankStart()
function mensajes()
current = mensaje1
end
if pad:cross() and oldpad:cross() ~= pad:cross() and current == mensaje1 then
current = mensaje2
end
if pad:cross() and oldpad:cross() ~= pad:cross() and current == mensaje2 then
current = mensaje3
end
if pad:cross() and oldpad:cross() ~= pad:cross() and current == mensaje3 then
current = mensaje4
end
if pad:cross() and oldpad:cross() ~= pad:cross() and current == mensaje4 then
current = mensaje1
end
screen.flip()
end


 

 

Tio, lo has explicado de muerte

Gracias. Hay te van 50 scenebitos.

Saludos.

Imagen de moikop

Usa las denominadas

variables de estado. Estas son variables booleanas que, como el nombre indica, representan el estado de algo :P

Suerte.

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.