Noviembre 23, 2012, 08:05:18 PM Ultima modificación: Noviembre 24, 2012, 10:58:51 PM por DarkKRuleR
Buenash! Pues estoy con un programita para llevar batallas de cartas, sin online, donde cada usuario hace su turno en el juego, acaba, genera un savegame que le pasa al rival para que continue, etc etc, pasándose savegames. Pero ahora que hago pruebas me da error...

al comenzar debes introducir el modo: modo usuario o modo maestro, el cual solo uso yo y requiere contraseña. Yo uso el modo maestro e introduzco las 60 cartas de cada jugador, ahí la partida se guarda. Entonces, el usuario va al modo usuario, donde automaticamente carga partida para que pueda jugar directamente a la partida que yo le he creado. Pero cuando carga da este error:

ERROR in
action number 1
of Draw Event
for object obj_carta:

Trying to draw non-existing sprite.


ERROR in
action number 1
of Draw Event
for object obj_carta:

Trying to draw non-existing sprite.


ERROR in
action

etc etc. todas las cartas fallan al cargar por perder su sprite.
En el orden tengo, en pseucodigo: "si entras en modo master, hay un menu para introducir la direccion de cada carta para que el programa las cargue con sprite_add desde una carpeta. LUEGO guarda partida". LUEGO DE ESO, hay otra parte de codigo con "si estas en modo usuario carga partida"

en teoria cuando el usuario carga la partida debería cargar la partida guardada justo despues de introducir las direcciones de las cartas, pero en el error pone que no encuentra esas direcciones, como si nunca las hubiera introducido!!
Sabéis qué pasa o debo daros más datos? la idea es que yo entro en modo Master para introducir las cartas de cada usuario (debe ser a mano, introduzco la direccion de todas las cartas, por ejemplo pongo /cartas/1-20/carta.png), y ahí se guarda. Luego, si entras en modo usuario, directamente te debería cargar la partida guardada en la que "eras" Master, que da igual pues después de ambos modos solamente te pregunta una contraseña, para asegurar que eres el jugador 1, y hacer tu turno.


-PD: intuyo que el problema puede ser, que el usuario carga una partida donde se han introducido las cartas, pero en su partida no se ha hecho, y al cargar no lo encuentra. Pero no lo creo pues al cargar tambien deberías cargar las cartas que introdujo el Master...

  Saludos makero DarkKRuleR:

Citar-PD: intuyo que el problema puede ser, que el usuario carga una partida donde se han introducido las cartas, pero en su partida no se ha hecho, y al cargar no lo encuentra. Pero no lo creo pues al cargar tambien deberías cargar las cartas que introdujo el Master...

  ¿Has comprobado que las cartas están en la dirección correcta al tratar de cargarlas el usuario? El "modo master" carga los "sprites" sin problemas. Eso ya lo tenemos descartado. Pero el "usuario" tiene que cargar las imágenes también, ¿acaso vienen ellas en el "paquete" de la partida? Si no vienen en la partida ¿de dónde las van a sacar?

Evidentemente el error dice que no encuentra las imágenes, por lo que no las encuentra... :-\

Otra posibilidad es que en caso de que sí envíes las imágenes en el paquete de actualización no las encuentre por problemas de la dirección donde deberían estar. Si se encuentran en disco "C",  "D" o simplemente en el directorio del propio juego.

  Eso sí, si no le implementaste al juego que guarde esas imágenes una vez las carga por primera vez, entonces siempre que envíes la actualización las va a pedir. Lo que quiero decir es que la actualización de una partida debe estar dividida en dos:

1*  Una actualización única: La de las cartas, estas se se envían una sola vez por partida y se guardan en el directorio del programa.
2*  la de los datos de la partida: Esta actualización es más liviana y se envía cada vez que pase un turno.

  Si pretendes enviar en cada actualización las imágenes pesará más la actualización y cada vez el usuario tendría que actualizar las imágenes. Muy lento.

  Espero encuentres el error. Un saludo makero. ;D   


#2 Noviembre 24, 2012, 08:23:23 PM Ultima modificación: Noviembre 24, 2012, 08:39:21 PM por DarkKRuleR
Gracias, no entiendo exactamente a qué te refieres. El Master hace 120 sprite_add para cargar todas las cartas. Tanto el master como el usuario tenemos en el mismo directorio las cartas para cargar correctamente.
Entonces, cuando cargamos partida: a caso el archivo de partida no debería contener las 120 variables con las cartas cargadas mediante sprite_add? Cuando ejecutas en modo usuario (cargar) cargas la partida comenzada por el master, en la cual se cargaron las cartas con sprite_add, conque el SAVEGAME debería contener eso.

Exactamente que es ineficiente o más recomendable? podría hacer que el master no cargara con sprite add, sino que guardara la direccion de las imagenes, y entonces el usuario, al iniciar, hiciera los sprite_add, y al guardar el usuario solo guardaría el contexto, lo que se guardaria seria la direccion de las imagenes (working_directory + "/cartas/etc") para que a cada ronda se carguen. Así el archivo de guardado no pesaría nada, ya que sólo contendría direcciones, y quizás no habría errores. No sé cómo pero tu mensaje me hizo darme cuenta, avísame si es cierto esto que digo y sería más eficiente esta forma.

Pues de momento no me funciona, las cartas salen con sus imágenes predeterminadas cuando deberían actualizarse... al guardar asigno a cada carta una variable con la dirección de una carta, y al cargar la propia carta debería hacer sprite_load con esa dirección... seguiré probando

pd- no sé a qué te refieres con actualizar cartas, simplemente el savegame contiene qué cartas tiene cada uno y su posicion en el campo, entre otros parámetros (vida, numero de turno...). EL usuario también tiene las carpetas con las cartas para que su programa pueda hacer sprite_add con las direcciones que tiene el savegame que le he pasado...

Una de las ocasiones donde aparece ese mensaje de: "trying to draw non existing object" es cuando no le has puesto sprite a un objeto.

Otra es cuando lo querés dibujar desde otro objeto q no has colocado en la room. Le ordenaste crear algo, pero no existe, porque no lo has puesto.

Espero q halles la respuesta .
La verdad es como la luz de una vela, que ni la oscuridad inmensa, puede opacarla.

Resuelto! Hice en el end step del controlador que, si una variabble es falsa, gestione todo y haga el sprite_add a cada carta por el valor guardado. EL savegame solo contendrá en cada carta un string con la direccion a su imagen, y al final de cada turno la variable se pone a true para que al proximo turno vuelvan a cargarlas. Las cartas se cargan en cada turno y el savegame solo pasa la direccion para cargarlas ( y las posiciones, parametros, vidas, etc). Con esto se ralentiza 2 segundos al cargar el turno, pero importa nada. Gracias! ^^