Hola a todos,
El caso es que haciendo un nuevo juego, LPHM7 me ha mandado el error Stack Overflow. Por lo que he leído es por falta de memoria. Pero no veo por qué :S
Le había añadido un collectgarbage("collect") y un System.memclean() en algunas partes del script pero lo único que hace es no funcionar más :S :S :S
Les dejo un trozo de código. Si necesitan más avisen:
function colocar() local pos = math.random(5) -- El error ocurre aquí cuando colocar() es llamada por la funcioón reset() local col = math.random(9) local si = math.random(1000) if not casilla[pos].estado then if si >= 500 then cuadro[pos]:clear(color[col]) casilla[pos].color = color[col] else cuadro[pos]:clear(SC) casilla[pos].color = SC end -- screen:blit(casilla[pos].x, casilla[pos].y, cuadro[pos]) P2:blit(casilla[pos].x, casilla[pos].y, cuadro[pos]) casilla[pos].estado = true screen.waitVblankStart() else colocar() end pos = nil col = nil si = nil end function reset() clearMem() screen:clear() P2:clear() SC = color[math.random(9)] for a = 1, 5 do colocar() end cur.img:clear(SC) CTRL() screen:print(0,0,puntos,color[4]) screen:blit(0,0,P2) screen:blit(cur.x, cur.y, cur.img) shot() screen.flip() screen.waitVblankStart() end
Un saludo y gracias de antemano :D
Para recibir ayuda por parte de otros usuarios más rápidamente, recomendamos que pongas títulos descriptivos y no utilices abreviaturas (estilo MSN) en tus post de los foros. Recuerda que accediendo al Manual del perfecto forero y las Normas de la Comunidad aprenderas trucos para resolver tus dudas antes.
No preguntes por MP, mejor pregunta aquí.
stack overflow
mm veamos, este error te sucede aleatoriamente me supongo.
Por qué sucede:
reservas 3 locales, (posiciones en la pila)
elije un numero aleatorio de 1 a 5, si casilla[pos].estado es false, ejecutas de nuevo la funcion.
con lo que:
reservas 3 locales (...
elijes un numero aleatorio de 1.... si false ejecutas de nuevo.
con lo que:
reservas 3 locales...
Supongo que se me entiende. Aleatoriamente, es posible que enganxe uno detras de otro la creacion de locales con locales con locales con locales. sumando a que viene de un for con dos locales mas, dentro de otra funcion con otros niveles de pila y tal.. weno. todo sumado, kizás lleguen a darte un tamaño de pila no soportado por tu luaplayer.
crea un mejor flujo de control en colocar() evitando re-llamarse sobre si mismo sin tener un control de cuantas veces.
Actualmente desarrollando nuestra web y UXCode : http://www.gcrew.es
Excelente explicación,
Muchas gracias Dev. Ahora ya sé como solucionarlo :P
Un saludo.
no uses
no uses la funcion system.memclean() ya que te quita bastante ram, usa solo el collectgarbage()
?
¿que te quita ram? si lo que hace es liberar la ram del psp y en combinacion con collectgarbage() es mucho mejor.
saludos
La practica te lo enseña...
Veras, descubri mientras programaba el homebrew que quiero presentar a scenery, en la carga de los 3 primeros scripts, siempre ponina collectgarbage() y system.memclean() y cuando llegaba el escritorio solo quedaban 16Mb de ram, un dia me dio por quitar el system.memclean() y cuando llego al escritorio tenia 18Mb de ram libres... la pratica lo dice todo =)
MiniApple v1.00...
no tienes que poner dos
no tienes que poner dos numeros en el math.random? algo asi math.random(num1,num2)
saluD
En realidad no.
Si te fijas bien en la documentación, math.random(m,[n]), verás que el segundo parametro (n) es opcional. Y en el caso de que n no exista, HM7 devuelve un numero aleatorio entre 1 y m.
Un saludo.
Para recibir ayuda por parte de otros usuarios más rápidamente, recomendamos que pongas títulos descriptivos y no utilices abreviaturas (estilo MSN) en tus post de los foros. Recuerda que accediendo al Manual del perfecto forero y las Normas de la Comunidad aprenderas trucos para resolver tus dudas antes.
No preguntes por MP, mejor pregunta aquí.