Anuncios Google

[Lua] (LuaDEV) No se muestra correctamente mi código (Solucionado)

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).


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.

¿Al final lo solucionaste?

¿Al final lo solucionaste?

Imagen de NEKERAFA

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).

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.