Bueno amigos de scenebeta me he decido ha escribir este tuto, debido a que veo muchos post sobre preguntas de cómo hacer un explorador, todo esto bajo LuaDEV, espero resolver sus dudas con esto, ya que un explorador es muy importante a la hora de elaborar un homebrew… bueno eso también depende de su uso xD pero ustedes saben xD manos a la obra :D
Primero declaramos las variables que utilizaremos.
posicion = 1 limiteInf = 1 Chocolate = color.new(210,105,30) negro = color.new(0,0,0) blanco = color.new(255,255,255) rojo = color.new(255,0,0) workDir = files.list("ms0:/")
“posicion” será nuestra variable que nos indicara en que lugar nos encontramos. Ejemplo, si nos encontramos adentro de una carpeta con 10 archivos con “posicion” sabremos en que archivo estamos posicionados indicado por un numero entero:
posicion = 1
“limiteInf” esta variable nos ayudara hacer el famoso scroll, para que quede un poco mas claro la variable se llama “Limite Inferior” obvio verdad xD esto marcara el inicio de donde se comenzara a imprimir los elementos de nuestra tabla esta variable no es “x”, ya veras su uso mas adelante ;)
limiteInf = 1
Declaramos nuestros colores, siempre tomando en cuenta el post de xerpi aquí recuerda que esto es a tu gusto:
Chocolate = color.new(210,105,30) negro = color.new(0,0,0) blanco = color.new(255,255,255) rojo = color.new(255,0,0)
Y por ultimo nuestro directorio de trabajo “workDir” si observas hemos utilizado una función de LuaDEV files.list() siempre revisa la documentación =_= files.list() es una función que nos lista los elementos de una carpeta, en otras palabras guarda en una tabla o array la dirección de los archivos que se encuentran en ella. En este caso files.list("ms0:/") guardara en una tabla todos los archivos que hay en la raíz de la memoria:
workDir = files.list("ms0:/")
Ahora haremos la función que recorrerá nuestra tabla donde están guardadas las direcciones de los archivos.
function opciones() x = 10 y = 13 lugar = workDir[posicion].name for i= limiteInf, #workDir do if posicion == i then screen.print(x,y,files.nopath(workDir[i].name),0.6,negro,blanco) else screen.print(x,y,files.nopath(workDir[i].name),0.6,blanco,0x0) end y = y + 13 end end
Declaramos nuestras variables de ubicación “x” & “y” con ellas se ubicara el texto donde tu lo asignes, te recomiendo estos valores; específicamente el de “y” debidos a las condiciones del scroll, pero tu fácilmente lo puedes modificar:
x = 10 y = 13
“lugar” se me acabo la imaginación xD asi que lo llame “lugar” esta variable almacena el lugar o archivo donde nos encontramos, no la posición, si no el nombre de la carpeta o archivo donde estamos posicionados:
lugar = workDir[posicion].name
Haremos el bucle que recorrerá nuestra tabla he imprimirá los nombres de los archivos:
for i= limiteInf, #workDir do
Esta es la estructura básica de un for: “for inicio, final do” esto sin contar el “end” que cierra el bucle. Esto quiere decir que nuestro for iniciara en 1(limiteInf = 1) y llegara hasta el tamaño de nuestra tabla; en Lua si antepones un # a una tabla, obtienes el valor de índices que hay en ella.
Ahora haremos la condición que imprimirá nuestras opciones:
if posicion == i then screen.print(x,y,files.nopath(workDir[i].name),0.6,negro,blanco) else screen.print(x,y,files.nopath(workDir[i].name),0.6,blanco,0x0) end y = y + 13
He decidido no explicar esta sección para que lean la documentación xD aunque yo en un tutorial anterior explique como funciona esto, pero no seria malo que repasaras la docu ;)
Vamos con la función para navegar por las opciones:
function navegador() if controls.press("down") and posicion ~= #workDir then posicion = posicion + 1 if posicion > 19 then limiteInf = limiteInf + 1 end end if controls.press("up") and posicion > 1 then posicion = posicion - 1 if posicion > 18 then limiteInf = limiteInf - 1 end end end
Ocuparemos una condición la cual, si presionas abajo o arriba ejecutara una acción. Si has leído tutoriales de programación o traes algunas bases de otros lenguajes, sabrás sobre el operador booleano “and” que en Lua se escribe de la misma manera. El operador “and” es una conectiva que puede definirse como verdadera, sólo cuando ambas proposiciones sean verdaderas. Para que entiendas mejor veamos nuestra condición:
if controls.press("down") and posicion ~= #workDir then
si presionas abajo y(and) la variable posición es diferente que #workdir entonces…
Solo si se cumplen las dos condiciones se hará lo que deseamos.
Ahora que ya entendemos por que ocupamos el operador “and” explicare por que “la variable posición tiene que ser diferente que #workdir” por que si “posicion” aumentara mas que el numero de índices de la tabla, nos daría error; por que buscaría variables en una tabla con índices que no existen.
Si eso se cumple ejecutamos lo siguiente.
Ya que cambiamos de archivo necesitamos cambiar también la posición en la que nos encontramos.
posicion = posicion + 1
Ahora aquí viene nuestro famoso scroll :D
if posicion > 19 then limiteInf = limiteInf + 1 end
He declarado 19 por el tamaño de letra que he asignado y el espacio entre cada impresión, si hay más de 19 archivos no podremos verlos todos. Recuerda nuestro for de impresión (for i= limiteInf, #workDir do) nuestra variable “limiteInf” empezaba en 1 y con esto se sumara tantas veces sea necesario, es decir que ya no imprimirá mis archivos desde el primero, si no desde lo indique “limiteInf” eso hará nuestro famoso scroll :D fácil verdad.
La segunda condición es lo mismo pero esta se cumplirá si presionas arriba y si “posicion” es mayor que 1, por que, si esta variable llega a cero, nos dará un error. Y el Scroll de este es igual solo que inverso, en ves de sumarle a “limiteInf” se resta1.
Vamos a nuestra función para entrar a las carpetas :D
function adelante() if workDir[posicion].directory then posicion = 1 limiteInf = 1 workDir = files.list(lugar) end end
En esta función, realizamos una condición que verificara, si donde nos encontramos (posición) es una carpeta o un archivo, esto lo sabemos colocando “.directory” a la tabla que almacena nuestros archivos listados.
Luego colocamos las variables “posicion” y “limiteInf” en 1 para que no haya errores de índices no encontrados en la tabla que listamos con:
workDir = files.list(lugar)
Si se recuerdan “lugar” mantenía el nombre de donde estamos ubicados, esto al pasárselo al file.list() listara lo que hay en la carpeta. Fácil no? x’D
Vamos con la funcion atras:
function atras() posicion = 1 limiteInf = 1 workDir = files.list(files.nofile(files.nofile(lugar))) end
con esto nosotros podes regresar, de alguna carpeta en la que nos hayamos metido y siempre colocamos las variables “posicion” y “limiteInf” en 1 para que no haya errores de índices que no existen en la tabla que listamos con
workDir = files.list(files.nofile(files.nofile(lugar)))
la funcion files.nofile() sirve para quitar el archivo a una ruta, pero no solo eso, puede seguir quitando hasta directorios… como asi? Veamos con un ejemplo:
Nos encontramos en la carpeta “demo” posicionados en el archivo “script.lua”
“ms0:/PSP/GAME/demo/script.lua”
Si nosotros aplicamos la función files.nofile() ha esa cadena nos quedaría:
“ms0:/PSP/GAME/demo/”
Pero eso no es suficiente, por que si listamos eso, nos quedaremos en el mismo lugar, ya que estamos en esa misma carpeta. Entonces volvemos aplicar la misma función files.nofile() y nos quedaría asi
“ms0:/PSP/GAME/”
Al listar eso, estaremos un directorio arriba de donde nos econtramos. Yo se LuaDEV es lo máximo x’D
Bueno espero poder ayudarles con este tutorial, respondiendo algunas o todas sus dudas sobre este tema, le he puesto algunos efectos (solo son colores x'D) para que no se vea tan cutre, esto es el gusto del programador :3 se que el código se podría simplificar mas, pero como dije es gusto del programador :3
Cualquier duda o comentario es bienvenido : D
Les pongo el codigo completo para que lo examinen, lo demas no lo explico por que seria de sobra:
posicion = 1 limiteInf = 1 Chocolate = color.new(210,105,30) negro = color.new(0,0,0) blanco = color.new(255,255,255) rojo = color.new(255,0,0) workDir = files.list("ms0:/") function opciones() x = 10 y = 13 lugar = workDir[posicion].name for i= limiteInf, #workDir do if posicion == i then screen.print(x,y,files.nopath(workDir[i].name),0.6,negro,blanco) else screen.print(x,y,files.nopath(workDir[i].name),0.6,blanco,0x0) end y = y + 13 end end function navegador() if controls.press("down") and posicion ~= #workDir then posicion = posicion + 1 if posicion > 19 then limiteInf = limiteInf + 1 end end if controls.press("up") and posicion > 1 then posicion = posicion - 1 if posicion > 18 then limiteInf = limiteInf - 1 end end end function adelante() if workDir[posicion].directory then posicion = 1 limiteInf = 1 workDir = files.list(lugar) end end function atras() posicion = 1 limiteInf = 1 workDir = files.list(files.nofile(files.nofile(lugar))) end while true do controls.read() navegador() draw.gradrect(0,0,480,272,Chocolate,Chocolate,negro,negro) opciones() screen.flip() if controls.press("cross") then adelante() end if controls.press("circle") then atras() end end
"Las cosas brillantes siempre salen de repente, como la geometría de una flor"
Tengo un preguntita...
Le pones limite arriba, pero... ¿se le puede poner para que haga un print de un numero determinado de archivos, en vez de todos los que haya?
By Aitor
Dices que se vean menos archivos en pantalla ¿no?
Haz esto por ejmplo (es ujn poco chapucero por asi decirlo pero bueno, también es más sencillo, cómodo y comprensible.
if y >= 230 then y = 277 end
Sígueme en Twitter: @Aitor_db
Mmm...
Mejor por este método http://psp.scenebeta.com/node/79153#comment-731051
Mmmm...
Es algo chapucero... pero es justo lo que buscaba, la verdad!
xDD
Muchas gracias.
By Aitor
De nada, si necesitas algo avisa
Mmm...
Pues si... Supongamos que solo salen en pantalla X archivos. Solo tienes que sumarle el límite inferior al superior y despues comprobar que no sea mayor que el númerpo de archivos totales. Utiliza
math.max()
en este caso para facilitar las cosasNekeOS, 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).
Y...
Que valor tomaría el limite superior??
Mmm...
Depende del tamaño de las letras y de la zona donde lo quieras poner. Imaginate que es en toda la pantalla, por lo quehe probado y caben 18 elementos, por lo que utilizando la función del tutorial sería así:
No lo he probado, pero en teoría solo muestra lo que hay que mostrar, encima de reducir código inecesario.
P.D: Se me ocurrió mientras estaba en la ducha XD
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).
LOOOOL
Ok. Lo probaré.
[duda] como reproducir un archivo de música
hola, pues como veis no consigo reproducir un archivo de sonido que engamos seleccionado en el menu explorador pulsando X,,,
lo he intentado con el siguiente código:
pero no me funciona...
alguien puede aportar algo de luz en el asunto?? gracias :D
salu2
Pues, esque no cargas el
Pues, esque no cargas el sonido, es así(copio y pego tu code y le añado):
Saludos.
el or,
hara que si hay un WAV se reproduzca automaticamente (Experiencia propia)
OK
Entonces el code debería ser este:
salu2
perdon
perdon si no habia comentado antes x'D pero creo que seria mejor asi
"Las cosas brillantes siempre salen de repente, como la geometría de una flor"
Efectivamente
Asi estaria correctamente.
pues un poco mas arriba me
pues un poco mas arriba me comentabas que con el or, si habia un WAV lo reproduciria automaticamente ¬¬
salu2
si, pero pones
de nuevo si pulsa X con lo cual ya no es lo mismo, aunque tambien sirve el ejemplo de cam.
Esta info me será de mucha
Esta info me será de mucha ayuda ^^
EDITO: Deberías poner comentarios en las funciones para que sea más facil entenderlo. Yo nunca había lido el código de un explorador de archivos y me da dolor de cabeza leerme esto. ;)
hombre yo te lo explico en un pis pas
Files.nofile sirve para
Files.nofile sirve para volver al directorio anterior.
No
Files.nofile() nos devuelve un string sin el último archivo o carpeta. Lo puedes utilizar para poner la ruta actual sin el archivo o para volver al directorio anterior
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).
Gracias, me has arreglao el
Gracias, me has arreglao el dolor de cabeza xD
Que le agregaste que antes no
Que le agregaste que antes no tenia?
mmm
define "antes"
no se a que te refieres o.o
Dijiste que no estaba
Dijiste que no estaba terminado y ahora si xD
iba explicar una parte
iba explicar una parte, pero me dio weba... na bromas, es para que investigaran un poco xD
puse negritas y otras cosas, por eso ;)
"Las cosas brillantes siempre salen de repente, como la geometría de una flor"
Creo que no esta relacionado con este
Tuto, pero me podrias enseñar, por ejemplo ya probe este mini explora, pero quisiera saber como le hago para reproducir un archivo mp3, poner solo una funcion y que se reproduzca cualquiera, como en tu pspclawexplorer, con la funcion de mp3.
HiderDEV 2.0: 100% 3D Images: 100% American Run: 100%
a ver
hay una funcion en LuaDEV que sirve para obtener la extension de un archivo segun el codigo "lugar" contiene el nombre de donde estas posicionado, si estas en un archivo puedes obtener la extension, cuando ya la tengas, solo comparalo con "mp3" y si esto se cumple, cargas el sonido y lo reproduces ;)
"Las cosas brillantes siempre salen de repente, como la geometría de una flor"
Entendi
todo menos lo ultimo de cargar el sonido, tengo que poner la direccion de donde esta la musica, lo que quiero es que cargue sea el sonido que sea.
HiderDEV 2.0: 100% 3D Images: 100% American Run: 100%
te dejo un trozo que tengo de un explorador que tengo
USALO como referencia. No copy/paste.
Dioni
Si entiendo esta funcion, la puedo poner en mi hb:
Espero sea asi.
HiderDEV 2.0: 100% 3D Images: 100% American Run: 100%
Bueno
por lo menos podrias cambiar las variables....
Es que asi no vas a aprender...
Exactamente como dioni te lo
Exactamente como dioni te lo ha dado, aunque creo que podrias ahorrate los bolens e if's, con algo como esto:
Se pero lo que estamos
Se pero lo que estamos haciendo los booleanos tienen suma importancia para no quedar como un desastre ni nada de eso.
La varible
Estoy con Barney, la variable cargar se puede quitar sin muchos problemas, ademas el hecho de asignarle primero un valor boolean y luego un string a la misma variable no es una muy buena practica de programacion y pocos lenguajes te dejan hacerlo, asi que mejor evitarlo jaja
un desastre?, de que tipo?,
un desastre?, de que tipo?, no creo que se rompa el psp xDD
mira bien las variables
mira bien las variables
"lugar" contiene el nombre de donde estas posicionado, cuando lo comparas y da verdadero, ya andentro lo cargas y lo reproduces ;)
"Las cosas brillantes siempre salen de repente, como la geometría de una flor"
Eso es sencillo
Quien!
Quien te bendicio con el Don de la programacion!?
Gracias por el tuto ;)
no es para tanto
no es para tanto
solo espero que esto te ayude ^^
Saludos ;)
Uff despues de varios meses
Uff despues de varios meses esperandolo:
Nautilus:
"Cuando haras el tuto?"
cam:
"Mañana :D"
nautilus:
"Lo espero!"
Una semana despues:
nautilus:
"Cuando haras el tuto"
cam:
"Pronto ya veras!"
Un mes despues:
nautilus:
"Que cuando haras el tuto!!!"
Se agradece nos vendrá muy bien
Follow me twitter nautilus1_jmccu!!
Sony, ya a nadie le interesa tus UMD si alguien compra una psp es por nosotros los coders. Madura y has un FW que haga la diferencia y anime a las personas en comprar un PSP
Igual que yo...
Igual que yo jeje...
lo siento por la espera ^^'
lo siento por la espera ^^'
pero el estudio y todo eso ustedes saben x'D
Por supuesto...
Los estudios son lo primero ;-)
Eso me aclaro muuchas cosas,
Eso me aclaro muuchas cosas, gracias.
de nada
de nada ;) cualquier cosa pregunta ^^
¡¡Por fin, compañero!!
Muchas gracias por hacerlo, me vendrá de perlas.
.....
como que el titulo dic:
Por favor no comentar
Saludos!
arriba pone
"Cualquier duda o comentario es bienvenido"
Editado: El uso abusivo de formatos de texto (como negritas y cursiva) dificulta la lectura e incumple las Normas de la Comunidad, antes de volver a postear por favor revíselas.| Rober Galarga
amm
Sólo lees las negritas?, cito:
aun así no comenten y hagan caso omiso a esto "Cualquier duda o comentario es bienvenido"