Hola a tod@s, resulta que estoy programando unas cosillas y he intentado hacer un efecto de un mensaje que aparece, pero resulta que no se muestra correctamente, más bien no suma 1 a la variable en la linea 18, solo suma la primera vez en el while, ya he intentado volver a hacerlo pero nada. Aquí la versión reducida:
msg_left = image.load("System/Img/msg/msg_left.png") msg_center = image.load("System/Img/msg/msg_center.png") msg_right = image.load("System/Img/msg/msg_right.png") system = {} system.clock = timer.new() system.message = {} function system.message.new(name, tim, text) -- system.message.new(nombre, tiempo, texto): Mostrar un mensaje del sistema system.message[name] = {} -- Aquí esta la tabla del mensaje local width = screen.textwidth(text, 0.6) if system.message[name].run == nil then system.message[name].run = 'show' end if system.message[name].clock == nil then system.message[name].clock = system.clock:time() end if system.message[name].y == nil then system.message[name].y = -17 end if system.message[name].run == 'show' and system.message[name].y < 29 then msg_left:blit(19, system.message[name].y) for n = 0, width do msg_center:blit(24+n, system.message[name].y) end msg_right:blit(23+width, system.message[name].y) screen.print(23, system.message[name].y+4, text, 0.6, color.new(90,150,255), color.new(0,0,0,90)) system.message[name].y = system.message[name].y+1 -- Esto es lo que no hace elseif system.message[name].run == 'show' and system.message[name].y == 29 then system.message[name].run = 'stay' elseif (system.clock:time()-system.message[name].clock)/1000 <= tim and system.message[name].run == 'stay' then msg_left:blit(19, system.message[name].y) for n = 0, width do msg_center:blit(24+n, system.message[name].y) end msg_right:blit(23+width, system.message[name].y) screen.print(23, system.message[name].y+4, text, 0.6, color.new(90, 150, 255), color.new(0,0,0,90)) elseif (system.clock:time()-system.message[name].clock)/1000 > tim and system.message[name].run == 'stay' then system.message[name].run = 'up' elseif system.message[name].run == 'up' and system.message[name].y > -18 then msg_left:blit(19, system.message[name].y) for n = 0, width do msg_center:blit(24+n, system.message[name].y) end msg_right:blit(23+width, system.message[name].y) screen.print(23, system.message[name].y+4, text, 0.6, color.new(90, 150, 255), color.new(0,0,0,90)) system.message[name].y = system.message[name].y - 1 elseif system.message[name].run == 'up' and system.message[name].y == -18 then system.message[name].run = 'end' end end while true do system.clock:start() system.message.new('hello', 5, "Bienvenido a NekeOS") screen.print(10,10, system.message['hello'].run.." "..system.message['hello'].y, color.new(255,255,255)) screen.flip() end
Un saludo
Solucionado, bufff...
Resulta que en la función estoy creando siempre la tabla, por lo que al hacer el ciclo y restarle uno, en el nuevo la vuelvo a crear una y otra vez. Encapsulando la tabla dentro de un if que comprueba si es nula la haga, se resuelve el problema, aquí el script final (por si acaso):
msg_left = image.load("System/Img/msg/msg_left.png") msg_center = image.load("System/Img/msg/msg_center.png") msg_right = image.load("System/Img/msg/msg_right.png") system = {} system.clock = timer.new() system.message = {} function system.message.new(name, tim, text) -- system.message.new(nombre, tiempo, texto): Mostrar un mensaje del sistema if system.message[name] == nil then system.message[name] = {} end local width = screen.textwidth(text, 0.6) if system.message[name].run == nil then system.message[name].run = 'show' end if system.message[name].clock == nil then system.message[name].clock = system.clock:time() end if system.message[name].y == nil then system.message[name].y = -17 end if system.message[name].run == 'show' and system.message[name].y < 29 then msg_left:blit(19, system.message[name].y) for n = 0, width do msg_center:blit(24+n, system.message[name].y) end msg_right:blit(24+width, system.message[name].y) screen.print(23, system.message[name].y+4, text, 0.6, color.new(90, 150,255), color.new(0,0,0,90)) system.message[name].y = system.message[name].y+1 elseif system.message[name].run == 'show' and system.message[name].y == 29 then system.message[name].run = 'stay' elseif (system.clock:time()-system.message[name].clock)/1000 <= tim and system.message[name].run == 'stay' then msg_left:blit(19, system.message[name].y) for n = 0, width do msg_center:blit(24+n, system.message[name].y) end msg_right:blit(23+width, system.message[name].y) screen.print(23, system.message[name].y+4, text, 0.6, color.new(90, 150, 255), color.new(0,0,0,90)) elseif (system.clock:time()-system.message[name].clock)/1000 > tim and system.message[name].run == 'stay' then system.message[name].run = 'up' elseif system.message[name].run == 'up' and system.message[name].y > -18 then msg_left:blit(19, system.message[name].y) for n = 0, width do msg_center:blit(24+n, system.message[name].y) end msg_right:blit(23+width, system.message[name].y) screen.print(23, system.message[name].y+4, text, 0.6, color.new(90, 150, 255), color.new(0,0,0,90)) system.message[name].y = system.message[name].y - 1 elseif system.message[name].run == 'up' and system.message[name].y == -18 then system.message[name].run = 'end' end end while true do system.clock:start() system.message.new('hello', 5, "Bienvenido a NekeOS") screen.print(10,10, system.message['hello'].run.." "..system.message['hello'].y, color.new(255,255,255)) screen.flip() end
Siento las molestias jejeje
NekeOS, el nuevo shell para PSP
PS4 500GB OFW, PS3 320GB OFW, PS3 500GB OFW, PSP 6.39 PRO-C Fix4.
Sony Xperia Z1 Compact con Android 5.1.1
Portatil Lenovo z50-70 Intel® Core™ i7-4510U y NVIDIA GeForce 840M con Elementary OS 0.3.2 Freya (64 bits) y Windows 10 (64 bits).
¿Al final lo solucionaste?
¿Al final lo solucionaste?
XDD
Si lo acabo de postear ahora jajaja
EDITADO: Nada, ya está, un fallo mu tonto jajaja
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
NekeOS, el nuevo shell para PSP
PS4 500GB OFW, PS3 320GB OFW, PS3 500GB OFW, PSP 6.39 PRO-C Fix4.
Sony Xperia Z1 Compact con Android 5.1.1
Portatil Lenovo z50-70 Intel® Core™ i7-4510U y NVIDIA GeForce 840M con Elementary OS 0.3.2 Freya (64 bits) y Windows 10 (64 bits).