Anuncios Google

[SOLUCIONADO]time()[LuaDEV]

Hola, soy muy nuevo en esto de la programacion, y sabia un poco HM, pero he estado leyendo cosas sobre LuaDEV y he decidido pasarme a este. Estoy intentando crear un pequeño homebrew.

Les dejo una parte del codigo:

tiempo = timer.new()
crono = tiempo:time()/1000
 
if controls.press("circle") then
      tiempo:stop()
end
 
screen.print(10,70,"Crono: "..crono)
screen.flip()

Como puedo hacer para que aparezca el tiempo que va en pantalla?? esque con el screen.print() me aparece 0 y al lado parpadeando un numero (q supongo sera lo que lleva)

Gracias.


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 conseguir hacerlo

Al final conseguir hacerlo con el timer.

Asi me quedo:

tiempo = nil
cont = 0
function unJ()
		if cont == 0 then
			screen.print(100,100,"Tiempo = 0 segundos")
		end
		screen.print(10,10,"cont = "..cont)
		if controls.press("cross") then
			tiempo = timer.new()
			tiempo:start()
			cont = 1
		end
 
		if cont == 1 then
		segundos = tiempo:time()/1000
			screen.print(100,100,"Tiempo = "..segundos.." segundos")
		end
			if cont == 1 and segundos >= 10 then
				tiempo:stop()
			end
 
		if controls.select() then
			ERROR()
		end
end
 
 
while true do
	controls.read()
	unJ()
	screen.flip()
end

Muchas gracias a todos por vuestra ayuda.

 

PD: Edito y pongo solucionado o lo hacen los moderadores??

Imagen de Dioni0396

ponlo tu ;)

.

Imagen de DeViaNTe

modulo timer

el modulo timer es aún algo que puede sufrir, y sufrirá, modificaciones. ( :P )
Es un módulo bastante... inútil, la verdad, puesto que hace automático algo que se puede hacer en dos lineas de código, amos, que si un luaplayer no lo tuviera sería tan fácil implementarlo como...

timer = {
  running = false,
  offset = 0,
  time = function(self) return os.clock() - self.offset; end,
  start = function(self) if not self.running then self.running = true; self.offset = os.clock(); end end,
  stop = function(self) self.running = false; end,
  new = function(self,o) o = o or { }; setmetatable(o,self); self.__index = self; return o; end,
}

Hale, ya teneis módulo timer para todos, y este seguro no falla xD.

Igualmente con un tiempoinicial = os.clock(); y tiempo = os.clock() - tiempoinicial; nos devolvería el tiempo transcurrido, así que, no sé, si os dan problemas los timers, probar os.clock().

P.D: Este módulo casero timer, devuelve el resultado en segundos directamente. Para esperar medio segundo seria:

abc = timer:new();
abc:start();
while abc:time() < 0.5 do screen.waitvblankstart(); end
abc:stop();
abc = nil; 


Actualmente desarrollando nuestra web y UXCode : http://www.gcrew.es

Dejo un poco aparte lo de las

Dejo un poco aparte lo de las milesimas, ya lo retomare mas tarde.

Una duda que me surge:

Tengo este codigo:

--Variables
rojo = color.new(255,0,0)
verde = color.new(0,255,0)
azul = color.new(0,0,255)
amarillo = color.new(255,255,0)
 
 
tiempo=timer.new()
 
function unJ()
		controls.read()
		screen.print(10,30,"Estas en el juego")
		screen.print(10,50,"Pulse equis para comenzar")
		if controls.press("cross") then tiempo:start() end
		screen.print(100,100,"Tiempo= "..math.floor(tiempo:time()/1000).."  segundos")
		if controls.press("triangle") then
		dofile("script.lua")
		end
 
		screen.flip()
 
		if controls.select() then
			ERROR()
		end
		end
 
while true do
	unJ()
end

Yo lo que quiero es que al pulsar X comience el cronometro. El problema esque empieza a funcionar antes de presionar X. 

Otra pregunta. Porque si pongo tiempo = timer.new() dentro de la funcion el cronometro se queda a 0 ?? no funciona ni pulsando X ni nunca si lo pongo dentro, cual es la razon??

Muxas gracias ;)

Imagen de barney77

Algo más

Algo más limpio:

tiempo=timer.new()
tiempo:start() -- Iniciamos el tiempo, por eso se queda en 0 we.
 
while true do controls.read()
if controls.press("circle") then tiempo:stop() end
screen.print(100,100,"Tiempo= "..math.floor(tiempo:time()/1000).."  segundos")
screen.flip()
end

math.floor, redondea hacia abajo, eso te dara el tiempo en SEGUNDOS  y no MILISEGUNDOS.

Funciona perfecto, muchisimas

Funciona perfecto, muchisimas gracias. Otra duda mas, si quiero poner que salgan los segundos y despues las decimas y centesimas??? Como lo podria hacer?? Porque si quitas lo de redondear te sale en milisegundos parpadeando y no pasa del 0...Gracias de nuevo

Imagen de barney77

Bien, usa variables,

Bien, usa variables, así:

tiempo=timer.new()
tiempo:start()
muestratiempoSegundos=math.floor(tiempo:time()/1000)
muestratiempoMilesimas=tiempo:time()/1000
 
while true do
screen.print(100,100,muestratiempoSegundos)
if math.floor(tiempo:time()/1000)>=10 then muestratiempoSegundos=muestratiempoMilesimas end -- si pasan 10 segundos ahora la variable que muestra el crono en segundos cambiara a la variable que lo muestra en milesimas
screen.flip()
end

OJO, que no lo he probado y no estoy al 100% seguro de que sirva, pero probar no cuesta nada.

 

Saludos.

En el print, quita math.floor

En el print, quita math.floor y tendrás el tiempo en segundos y milésimas.

pues nada, sigue igual, me

pues nada, sigue igual, me sale el 0 quieto y parpadeando .001 lo he probado de las dos formas que me habeis puesto y no me sale.Ademas doy a circulo y sigue pasando lo mismo, sigue parpadeando, pero no cambia de ese numero nunca. Gracias de todas formas. Si alguien sabe que puedo hacer que lo diga porfa jeje

Ponlo así: tiempo =

Ponlo así:

tiempo = timer.new()
 
if controls.press("circle") then
      tiempo:stop()
end
 
screen.print(10,70,"Crono: "..tiempo:time()/1000)
screen.flip()
 

 

Una cosa, supongo que eso lo tienes en un bucle, no?

xerpi...

Se te ha olvidado iniciar el timer (tiempo:start()), quizás por eso se queda en 0 todo el tiempo...

Prueba...

tiempo = timer.new()
crono = tiempo:time()/1000
 
tiempo:start() -- Por si no lo habías hecho...
 
if controls.press("circle") then
      tiempo:stop()
end
 
screen.print(10,70,"Crono: " .. crono) --Prueba separando la concatenación de la variable y el string...
screen.flip()

Prueba separando los puntitos (concatenación). O el fallo puede estar en que no has iniciado el tiempo (tiempo:start())

Un saludo.


 

 

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.