Hola, tengo un problema y es que cuando quiero escribir un archivo o leerlo, me da error, a nil value, y es que no se porque.
Por ejemplo para leer un numero
file1 = io.open("Juego/UltimoRecord1.lua")
UltimaPuntuacion1 = file1.read("*n")
Me da error.
Tambien, en el juego, cuando quiero que al pulsar start vuelva al menu, se me queda blokeada la PSP. Alguna posible solución??
Saludos.
Bieeeen!!!!
Al fin!!, despues de tanto esfuerzo, despues de tanto pensar, despues de tanto pedir, despues de tanta ayuda recibida... Por Fin lo he solucionado (de momento...).
Os agradezco a todos la ayuda que me habeis dado, para cualquier cosa aqui me teneis ;).
Ahora podre acabar mi juego a tiempo para el Scenary Beta 2008.
Muchas gracias a todos, Saludos.
Ok Gracias.
Gracias por toda la ayuda pero por ahora dejare el tema este de escribir para cuando este mas relajado.
Pero una cosa que no he acabado de solucionar es el comando dofile, que siempre se me queda atascada la psp.
Dentro del bucle, pongo una funcion para que salga una imagen con la ultima puntuacion, y que al pulsar start cargue el menu, pero al pulsar start se me bloquea la psp.
aqui les dejo el codigo:
function pjmuerte()
if S[1].Salud <= 0 then
screen:clear()
screen:blit(0,0,gameoverI)
screen:fontPrint(letra25,269,168,S[1].Puntuacion,negro)
if pad:start() then
dofile("Juego/Menu.lua")
end
end
end
Me pueden ayudar?
Es que estoy un poco desesperado porque este juego no lo he modificado casi desde el dia 13 por culpa de este fallo, que al cargar con dofile el menu se me queda atascada la psp y tengo que mantener pulsado el boton de encender 7 segundos o sacar la bateria. ayuda.
Saludos.
Seguro que eso de menu 1.lua
Seguro que eso de menu 1.lua tiene codigo? ,porque cuando cargas un script sin codigo hace eso.
Saludos
no, si que tiene.
Lo curioso es que el menu me funciona correctamente, y puedo cargar otros scripts, como los del juego, incluso, al principio de todo te sale el splash ese del scenary beta 2008, y despues carga el menu. Vamos, que el problema creo que es cuando se carga por segunda vez el menu, pero no se.
Nadie lo sabe??
O como mínimo de alguna forma de saber donde esta el error.
Es que ya no se que mas hacer.
Pueden ser mil cosas...
Desde un bucle infinito a váyase a saber...
Como sugerencias:
Si no sabes qué quiero decir con lo de "trazado"... significa, simplemente, que imprimas en pantalla cada paso que des. Así podrás localizar en qué punto se queda colgado el programa. Ojo, que eso no implica que el error esté ahí, pero te servirá para tirar del hilo.
Strength is irrelevant. Resistance is future. We wish to improve ourselves.
La fuerza es irrelevante. La resistencia es futuro. Queremos mejorarnos.
A
que te refieres con hazlo desde una funcion definida una vez, que haga una funcion ejemplo Menu() y que la llame cuando necesite ir al menú?
Exacto
Y por "definirla una vez", me refiero a que te asegures que solo aparezca una vez su definición. Si resulta que, por ejemplo, utilizas una función que se define en el archivo que cargas... bueno, probablemente estarías sobreescribiendo una función que se está ejecutando. No sé lo bastante de Lua para saber cómo gestionaría algo así, pero es una de esas cosas que, por lo general, vuelven locos a los programas.
Una manera de asegurarse que la función se define sólo una vez es incluir la definición en un bloque if que se ejecuta si Nombrefuncion es nil. Hay otras...
Pero vaya, que yo de entrada no lo usaría desde un archivo externo, ni que sea para descartar que el error venga de la carga.
Strength is irrelevant. Resistance is future. We wish to improve ourselves.
La fuerza es irrelevante. La resistencia es futuro. Queremos mejorarnos.
ó_ò
Ahora me he perdido y estoy muy confundido en casi todo.
Y lo de poner un bloque if que se ejecuta sinombrefuncion es nil, que quieres deicir es que no lo veo.
Siento poder ser pesado, pero este error me saca de mis casillas desde hace bastante.
Saludos y Gracias.
Aclarando...
Veo que ya lo has sacado, y me alegro :)
Sólo para aclarar el punto de la nombrefunción y eso, por si no lo has sacado; es un truqui que te puede servir para el futuro...
No voy muy suelto en Lua, así que siempre tengo que irme mirando la referencia para no hacer "faltas de ortografía"; lo que viene a continuación es pseudocódigo, pero servirá (espero) para entendernos. Creo recordar que el signo de comparación de igualdad (si A es igual a B) es ==... Así, si queremos comprobar si la función "Nombrefuncion" (nombre genérico de la función inventada) está definida, lo que haremos es:
if nombrefuncion==nil then
-y aquí ponemos el código de la función-
end
Así, lo que hacemos es asegurarnos que no define dos veces la función. Es útil cuando no tienes un control completo de cómo se carga todo, o no estás seguro de eso; por ejemplo, si usas una biblioteca/librería de funciones, y hay unas que necesitan otras, y esas necesitan otras más, y así a la náusea... y puede ser que al redefinir la función se fastidie algo. Así te aseguras que lo que tiene que definirse sólo una vez, se define sólo una vez.
El quid de la cuestión es que todo lo que no sea de sistema y no hayas definido te dará nil, mientras que una función ya definida no es nil. Por tanto, si ya has definido la función, el código de dentro del bloque if no se ejecutará.
Strength is irrelevant. Resistance is future. We wish to improve ourselves.
La fuerza es irrelevante. La resistencia es futuro. Queremos mejorarnos.
MMM
Vale, y luego al cargar un script por ejemplo, se le asigna nombrefuncion un numero o cualquier cosa??
Pero en general creo que lo he pillado. Muchas gracias por tu ayuda, podras verte en mis creditos ;)
Más o menos...
La cosa está en que si la función "nombrefuncion" no se ha definido, será nil (todo lo que no se haya definido será un nil).
Pero si ya lo has definido, tipo
nombrefuncion=function...
...
end
entonces no será nil :), por tanto el bloque if no se ejecuta. No tienes que preocuparte por nada más... Lua ya lo reconoce como un "tipo de datos función de usuario".De ahí que puedas ejecutar ese código del bloque if tantas veces como quieras sin que se sobreescriba la función.
También, claro está, puedes hacer una variable que indique si la has definido, pero en principio no es necesario...
Se agradece lo de los créditos, un saludo :)
Strength is irrelevant. Resistance is future. We wish to improve ourselves.
La fuerza es irrelevante. La resistencia es futuro. Queremos mejorarnos.
Entendido.
Vale ya lo he entendido.
Tambien lo de los créditos, es porque cuando era muy novato en lua, y escrivia comentarios en los tutoriales preguntando cosas simples que no entendia, tu y Guillermo_Cornielle me ayudasteis, y las primeras ayudas son quizas las mas útiles ;).
Saludos.
Te recomiendo que uses estas funciones:
function guardar_configuracion()
end
function leer_configuracion()
end
Error
Si te hubieras leido el tutorial no te pasaría. No se puede leer scripts lua, solamente cargarlos. Solamente se puede ver y escribir los archivos txt.
OK Gracias. Pero...
Aún hay una cosa que no me funciona. Y es que en el juego (ya sea porque te han matado o cualquier otra cosa) pongo que cuando se pulsa Start, cargue el menú, pero en la PSP cuando pulso start, se me bloquea la PSP y no puedo hacer nada.
Si
Si no te explicas mejor, pon el código.
Por ejemplo:
Este es el codigo que tengo para las instrucciones:
function instr()
pad = Controls.read()
screen:clear()
screen:blit(0,0,instrucciones)
if pad:start() then
dofile("Juego/Menu.lua")
end
end
while true do
instr()
screen.waitVblankStart()
screen.flip()
end
al apretar start, se me bloquea la psp, o por ejemplo
function pjmuerte()
if S[1].Salud < 0 then
S[1].Salud = 0
end
if S[1].Salud == 0 then
screen:clear()
archivo = io.open("Juego/UltimoRecord3.txt","w")
archivo:write(S[1].Puntuacion)
screen:blit(0,0,gameoverI)
screen:print(269,168,S[1].Puntuacion,negro)
if pad:start() then
dofile("Juego/Menu.lua")
end
end
end
aqui tambien se me bloquea la PSP al pulsar start. No me preguntes por que son las otras cosas porque es un poco lioso, tipico de mi.
Espero que alguien pueda ayudarme, aunque igualmente hoy piro y no vuelvo hasta el 25.
Saludos.
Error
Te falta el pad = Controls.read():
function pjmuerte()
if S[1].Salud < 0 then
S[1].Salud = 0
end
if S[1].Salud == 0 then
screen:clear()
archivo = io.open("Juego/UltimoRecord3.txt","w")
archivo:write(S[1].Puntuacion)
screen:blit(0,0,gameoverI)
screen:print(269,168,S[1].Puntuacion,negro)
if pad:start() then
dofile("Juego/Menu.lua")
end
end
end
No
lo tengo mas arriba, es que es una parte del scritps :S