Como es que cuando estoy navegando por mi programa aveces me salta:
no enough memory
Y tengo que reiniciar
Codigo:
os.cpu(333); black=color.new(0,0,0) azul=color.new(0,128,192) blanco=color.new(255,255,255) bateria100 = image.load("Imagenes/100%.png") bateria75 = image.load("Imagenes/75%.png") bateria50 = image.load("Imagenes/50%.png") bateria25 = image.load("Imagenes/25%.png") navegacion = sound.load("Sonidos/navegacion.wav") menu = {} menu[1] = image.load("Imagenes/menu1.png") menu[2] = image.load("Imagenes/menu4.png") menu[3] = image.load("Imagenes/menu5.png") menu[4] = image.load("Imagenes/menu6.png") menu[5] = image.load("imagenes/menu7.png") options = 5 mActual = 1 while true do controls.read() screen.clear(black) image.blit(0,0,menu[mActual]) if controls.press("up") then if mActual<=1 then mActual=5 else mActual = mActual - 1 end elseif controls.press("down") then if mActual >=5 then mActual = 1 else mActual = mActual + 1 end end if controls.cross() then sound.play(navegacion); end if controls.cross() and mActual == 1 then dofile("System/Explorer.lua") end if controls.cross() and mActual == 2 then dofile("System/USB.lua") end if controls.cross() and mActual == 3 then dofile("System/Botones.lua") end if controls.cross() and mActual == 4 then dofile("System/Creditos.lua") end if controls.cross() and mActual == 5 then dofile("System/Salir.lua") end porcentajeB = batt.percent() screen.print(432,8,porcentajeB.."%",blanco) if batt.percent() <= 100 and batt.percent() > 75 then bateria100:blit(402,4) elseif batt.percent() <= 75 and batt.percent() > 50 then bateria75:blit(402,4) elseif batt.percent() <= 50 and batt.percent() > 25 then bateria50:blit(402,4) elseif batt.percent() <= 25 and batt.percent() >= 0 then bateria25:blit(402,4) end screen.flip() end
solo limpia tu code a la hora
solo limpia tu code a la hora de cambiar de script ejemplo
function Limpieza()
imagen = nil collectgarbage("collect")
end
ya solo pones la funcion antes del dofile y listo.
en tu caso que cargas imagenes en tabla usa bucles for y sera mas rapido y menos escribir saludos.
Solo lo pongo debajo de un
Solo lo pongo debajo de un dofile o de todos?
Y aparte el los otros script?
Siempre detras de cada dofile
Siempre detras de cada dofile y tienes que poner en nil todas las imagenes y si en los otros script tambien ya que a cada cambio limpias porque si no vuelve a cargar la ram.
He visto codigos muy
He visto codigos muy ordenados y otros no tanto, al igual que antes hacia codigos desordenados y con el tiempo y siguiendo consejos los he mejorado. Prueba ha cargar todas las imagenes que necesitaras al comienzo y ya luego las liberas. en caso de necesitar demasiadas, cosa que dudo. antes de salir de un script a otro, libera las imagenes que no vas a usar. Para referencia chaka la documentacion es con :free() y nil, me parece.
¿En cada archivo cargas
¿En cada archivo cargas variables?
Si
Haber por ejemplo en el apartado USB Cargo las imagenes de las baterias, dos sonidos, y la imagen de fondo y luego aparte lo demas
Más imágenes de baterías?
Más imágenes de baterías? Para qué? Una vez declaradas en un script, las puedes usar en cualquier otro sin problemas.
Por cierto... si las imágenes de tu menu son del tamaño de la pantalla del psp, puedes probar a reducirlas. Por ejemplo, cargas un fondo sin letras, y los letreros de cada opción los cargas por separado (sólo el letrero,con el tamaño suficiente para contener el texto de cada opción, y con fondo transparente). De esta manera se reduce mucho el uso de ram ;)
Otra cosa... el screen.clear es totalmente inútil si lo usas con color negro, LuaDEV pinta toda la pantalla de negro cuando usas el flip :P
Pues al quitarle el
Pues al quitarle el imagen.load de las baterias en los otros script no se muestran
Si haces el blit de que se
Si haces el blit de que se deben mostrar.
Pues eso está mal hecho,
Pues eso está mal hecho, cargao todo al principio y usa funciones ( Lua da malos hábitos de programación y ahora mismo lo estoy viendo contigo, sigue nuestros consejos para programar de una forma más limpia )
Tutos14
SIEMPRE QUE POSTEES UNA DUDA
SIEMPRE
Pon el codigo de tu aplicacion, sino, NUNCA vamos a poder ayudarte, ya que no somos adivinos, por desgracia.
Me imagino que debes cargar
Me imagino que debes cargar cosas a cada pasada de bucle.
Pues eso... no tienes
Pues eso... no tienes suficiente memoria. Debes liberar objetos que no vayas a usar, como imágenes o sonidos (
especialmente si usas dofile)
Pero del homebrew o de la
Pero del homebrew o de la PSP?
del...
del homembrew eso te salta porque se llena la memoria ram (eso creo)
siusas luadev me parece que hay una funcion para liberar un poco de espacio
loadcallback o algo asi .Siquieres mas info mira la documentacion
Es
Es collectgarbage();
Recomiendo usarala despues de liberar el objeto, algo así:
Y la llamarias así:
Basicamente lo que hace esto es que empezará a reproducir el sonido, si presionas X, lo parara y lo reseatará a 0 y lo liberará por medio de la función antes definida.
Salu2.
PD: Basicamente la funcion liberador serviria para objetos que se pueden liberar por medio de lua, para liberar variables, pues ponlas en nil, siempre es recomendable dejar en nil lo que se va a liberar(este liberado por medio de las funciones de lua o no).
ne
intenta hacer algo como
imagen = image.load("bla.png")
liberador(imagen)
screen.print(10,10,type(imagen))
te sorprenderá el resultado ;)
Edito: mmm, nada, el free ya las pone en nil, la prueba sería si usas animlib por ejemplo.
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 -_-
Ok, intetanré
Ok, intetanré
Solo poniendo
Solo poniendo esto:
En el bucle dices que funciona?
Antes de nada, edita el post
Antes de nada, edita el post con tu código.