Comunidad de diseño web y desarrollo en internet online

shared object en as2

Citar            
MensajeEscrito el 06 Jul 2012 07:37 pm
bueno, mientras estaba haciendo uno de mis juegos (ya avanzados) me tope con un pequeño problema, y eso es algo indispensable en un juego mas largo, es el guardado de partida, he buscado soluciones a esto y la que me llamo la atención fue la de el método de shared object, pero en realidad no se como utilizarlo, agradecería mucho que me ayudaran con ello por favor.


En si, quiero ayuda sobre como guardar el avance (en un archivo que contenga los datos)
y como cargar la partida.

por favor agradecería mucho su ayuda y de antemano gracias.

Por flasher95

18 de clabLevel



 

chrome
Citar            
MensajeEscrito el 06 Jul 2012 08:00 pm

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 06 Jul 2012 10:50 pm
¿quedaria bien este codigo para eso?

Código ActionScript :

  submit.onPress = function(){ 
              so = SharedObject.getLocal("juego") 
      }
    stop() 

Por flasher95

18 de clabLevel



 

chrome
Citar            
MensajeEscrito el 06 Jul 2012 10:53 pm
Así lo que haces es crear un SharedObject (o pillar la referencia si ya existe) Te falta guardar (y leer el tuto)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 06 Jul 2012 11:03 pm
bno mm ya lo lei pero no soy basatante bueno en ingles asi que por favor me puedes señalar el codigo por favor

Por flasher95

18 de clabLevel



 

chrome
Citar            
MensajeEscrito el 06 Jul 2012 11:41 pm
Aqui te dejo un tuto en español:
http://www.tutoriales-flash.com/tutorial.php?id_tuto=9

Espero te sirva.

Por javiert239

38 de clabLevel



 

chrome
Citar            
MensajeEscrito el 06 Jul 2012 11:48 pm

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 07 Jul 2012 01:15 am
Vaya, buen tutorial, muy bien explicado. Tambien me sirvio a mi. Gracias.

Por javiert239

38 de clabLevel



 

chrome
Citar            
MensajeEscrito el 07 Jul 2012 10:16 pm
muchas gracias si estuvieron buenos los tutoriales creo que ya se como utilizarlo (creo)

Por flasher95

18 de clabLevel



 

chrome
Citar            
MensajeEscrito el 13 Jul 2012 05:07 pm
Bueno, ya que este post esta creado aprovecho para plantear el problema que tengo.
Reulsta que queria ponerle ese codigo a un juegoque estoy haciendo, pero primero lo probe a escala pequeña y funciono. Pero cuando lo fui a poner en mi juego funcionaba. Asi que despues de todo un dia cambiando codigo y rompiendome el coco, decidi hacerlo a escala mediana.

Lo que quiero es que se me guarde el frame actual, y despues cargarlo. Repito, en la prueba a escala pequeña me funciono.

La prueba a escala mediana consiste en un menu de guardar y en un menu de cargar que estan por defecto con visibilidad false. Hay un boton de guardar y cargar, que al presionarlos la visibilidad de esos menu pasa a ser true. En cada uno de esos menus, hay un slot (que es un boton), el cual guardarara o cargara el fotograma actual dependiendo del menu.

En el codigo bel boton de guardar pongo lo siguiente:

escribió:

on (press) {
guardar._visible = true;
fa = _currentFrame;
}


Y en el slot pongo esto:

escribió:

on (release) {
guardarDatos(fa);
}



Por otra aprte, en el slot de cargar pongo esto:

escribió:

on (release) {
fa = cargarDatos("fa");
_root.cargar._visible = false;
}


En el menu de cargar pongo esto:

escribió:

function guardarDatos(fa:String) {
var disco_so:SharedObject;
disco_so = SharedObject.getLocal("datos");
disco_so.data.elFotograma = fa;
disco_so.flush();
}


Y en el menu de guardar pongo esto:

escribió:

function cargarDatos(dato) {
var disco_so:SharedObject;
disco_so = SharedObject.getLocal("datos");
if (dato == "fa") {
return disco_so.data.elFotograma;
}
}


Como se que esto es muy dificil de explicarlo, les dejo el .fla:
http://www.mediafire.com/?vlhsacmsdn3dztk

Fui a los archivos locales donde se guardarn los.sol de los sharedobject y no se creo, asi que el problema por ahors esta en el guardado.
Esoero puedna ayudarme.

Por javiert239

38 de clabLevel



 

chrome
Citar            
MensajeEscrito el 13 Jul 2012 05:40 pm
Esta un poco complicado tu código. Haz una primera cosa: guarda un string cualquiera y recuperalo. Por ejemplo

disco_so.data.elFotograma = "test";

Al recuperarlo no uses ningun if ni nada, solo muestralo en un campo de texto. Si eso funciona, luego ya agregas tu lógica

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 13 Jul 2012 06:16 pm
Corrijo porque tuve un error. Este archivo lo hice recien muy a la apurada e inverti los codigos de cargar y guardar y me olvide de ponerle esto al slot de cargar:

on (release) {
fa = cargarDatos("fa");
_root.gotoAndStop(fa);
_root.cargar._visible = false;
}

Ahora si me guarda, el problema es al cargar.
Sin el gotoandStop no iba ir a ningun lado xD
Y el codigo en si funciona solisarg, el tema cambio cuando agregue los menus de cargar y guardar.

Aqui les dejo el archivo corregido:
http://www.mediafire.com/?jh0ljjjgdnmo6in

Por javiert239

38 de clabLevel



 

chrome
Citar            
MensajeEscrito el 13 Jul 2012 06:28 pm
Bien, lo siguiente es un error de concepto

if (dato == "fa") {
return disco_so.data.elFotograma;
}

¿Que diferencia hay entre esto y hardcodear el string "fa"? Para darle mas sentido a ese c{odigo seria

Código ActionScript :

on (release) {
  disco_so = SharedObject.getLocal("datos");
   _root.gotoAndStop(disco_so.data.elFotograma);
   _root.cargar._visible = false;
}


Luego mira en la ayuda, las pelis no sharean por defecto un SO, tienes que darle una ruta. No lo tengo muy fresco ahora, pero si le das por ejemplo

disco_so = SharedObject.getLocal("/datos");

Y lo recuperas con el mismo path

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 13 Jul 2012 06:41 pm
Gracias por la respuesta amigo. el if lo deje del link que pasaste del tuto de sharedobject, porque mi idea es despues agregar mas datos, pero primero hay que hacer que funcione con 1 xD

El tema es que me baje un programa para editar los .sol, y ver que se me estaba guardando. Ahi esta el problema, no se me guarda absolutamente nada dentro de elFotograma. La cosa es que si pongo el codigo fa = _currentframe, dentro del menu guardar (que es un movieclip), si guarda un valor, que es el 1, porque esta tomando el primer forograma de ese movieclip. Por lo que cambie el codigo a fa = _root._currentframe, pero con ese cambio sigue tomando el valor 1. Asi que no tengo muy claro que problema hay ahi.

Por javiert239

38 de clabLevel



 

chrome
Citar            
MensajeEscrito el 13 Jul 2012 08:41 pm
En cualquier caso no es un tema del SO. En que frame se supone que debe estar _root? Si pones

trace(_root._currentframe)

¿Que es lo que traza?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 13 Jul 2012 09:28 pm
Si lo pongo dentro del movie clip me devulve el valor 1. Si quieres puedes probarlo con el archivo .fla que subi.

Por javiert239

38 de clabLevel



 

chrome
Citar            
MensajeEscrito el 13 Jul 2012 10:06 pm
Si, sale 1, eso pusiste en el mensaje anterior, lo que te sugiero es que traces _root a ver que sale. Y no es necesario que yo haga pruebas, estoy seguro que con tu esfuerzo lo lograrás

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 13 Jul 2012 10:14 pm
A que te refieres exactamente con que trace _root?

Por javiert239

38 de clabLevel



 

chrome
Citar            
MensajeEscrito el 13 Jul 2012 10:43 pm
Mira esta linea

trace(_root._currentframe)

Lo que hace es sacar por el panel de salida cual es el _currenframe en _root al momento de hacer la operación. Si muestra 1 y lo que guarda es 1, eso quiere decir que funciona bien (mas allá de que no sea tu objetivo) Ahora si muestra otro número distinto al que guarda, entonces hay algo mas que no has explicado

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 14 Jul 2012 12:09 am
Cuando pongo el _currentframe en el movieclip guardar y me obtiene el valor 1, se guarda y luego se cargar efectivamente ese numero, asi que funciona. El problema, es que no puedo obtener el currentframe de la linea principal. Porque cuando pongo el _currentframe en la linea principal la funcion guardar no toma la variable fa, no se porque. Inlcuso intente declararla como global por si acaso entre un millon de cosas mas, La verdad que ya se me acabaron las ideas.

Por javiert239

38 de clabLevel



 

chrome
Citar            
MensajeEscrito el 14 Jul 2012 03:20 am
Si, lo logre. Solo tenia que poner el fa = _root._currentframe, en el slot de guardar. No tengo ni la menor idea de porque ahi si funciona y en los demas lados no, pero se me dio por intentarlo y funciono.

Por javiert239

38 de clabLevel



 

chrome
Citar            
MensajeEscrito el 14 Jul 2012 05:18 am
Bueno, solucionado ese tema, ahora quiero hacer lo mismo pero con dos slots en lugar de uno solo. Pero me surgio otro problema.

Pongo este codigo en el menu de guardar:

escribió:

function guardarDatos(fa:String, fa2:String) {
var disco_so:SharedObject;
disco_so = SharedObject.getLocal("datos");
disco_so.data.elFotograma = fa;
disco_so.data.elFotograma2 = fa2;
disco_so.flush();
}


Pongo esto en el slot 1:

escribió:

on (release) {
fa = _root._currentframe
guardarDatos(fa);
}


Y pongo esto en el slot 2:

escribió:

on (release) {
fa2 = _root._currentframe
guardarDatos(fa2);
}


El problema que tengo, es que al darle click al slot 2 elFotograma2 queda vacio y el elFotograma queda con el valor que quiero. No entiendo porque si toco el slot 2 al elFotograma se le asigna un valor.

Por javiert239

38 de clabLevel



 

chrome
Citar            
MensajeEscrito el 14 Jul 2012 01:22 pm
El siguiente concepto que te será muy útil es el de ámbito (scope en inglés), que es el alcance de las variables. En principio todo el mundo entiende local (dentro de una línea de tiempo) y global (en todos lados), lo que usualmente lleva a que se use todo global y listo, rompiendo la encapsulación e iniciando problemas de overwriting de variables por todos lados. Mirate
http://www.flash-db.com/Board/index.php/topic,4072.0.html , seguramente si googleas encuentras sobre el tema en español

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 14 Jul 2012 02:53 pm
Si, yo me aseguro de no usar todo el tiempo variables globales, solo las uso en casos extremos. El unico caso en el que las utilizo es cuando cargo un swf externo con variables iguales al swf del que fue cargado.
Pero lo que si no sabia era la diferencia entre declarar una variable con var myvar=1, y delcararla directamente myvar=1
Sin embargo, no veo en que me ayuda esto, porque ambas variables en mi caso, se ejecutan en la misma linea del tiempo, en la misma funcion.

Por javiert239

38 de clabLevel



 

chrome
Citar            
MensajeEscrito el 15 Jul 2012 12:54 am
Listo ya lo soluciono. Deseche la funcion de guardar, y puse el codigo independiente en cada slot.
O sea, puse esto en el slot 1:

escribió:

on (release) {
fa = _root._currentframe
var disco_so:SharedObject;
disco_so = SharedObject.getLocal("datos");
disco_so.data.elFotograma = fa;
disco_so.flush();
}


Y esto en el slot 2:

escribió:

on (release) {
fa2 = _root._currentframe
var disco_so:SharedObject;
disco_so = SharedObject.getLocal("datos");
disco_so.data.elFotograma2 = fa2;
disco_so.flush();
}


Y asunto resuelto.
Ya me sale sharedobject hasta por los oidos xD

Por javiert239

38 de clabLevel



 

chrome
Citar            
MensajeEscrito el 23 Jul 2012 01:12 am

javiert239 escribió:

Listo ya lo soluciono. Deseche la funcion de guardar, y puse el codigo independiente en cada slot.
O sea, puse esto en el slot 1:

escribió:

on (release) {
fa = _root._currentframe
var disco_so:SharedObject;
disco_so = SharedObject.getLocal("datos");
disco_so.data.elFotograma = fa;
disco_so.flush();
}


Y esto en el slot 2:

escribió:

on (release) {
fa2 = _root._currentframe
var disco_so:SharedObject;
disco_so = SharedObject.getLocal("datos");
disco_so.data.elFotograma2 = fa2;
disco_so.flush();
}


Y asunto resuelto.
Ya me sale sharedobject hasta por los oidos xD




Muchisimas gracias jeje
enserio

Por flasher95

18 de clabLevel



 

chrome
Citar            
MensajeEscrito el 23 Jul 2012 01:34 am
De nada, me alegra saber que mis rompederos de cabeza le sirvieron a alguien mas xD

Por javiert239

38 de clabLevel



 

chrome
Citar            
MensajeEscrito el 23 Jul 2012 01:58 am
bueno una ultima duda

Código ActionScript :

function guardarDatos(fa:String, fa2:String) {
var disco_so:SharedObject;
disco_so = SharedObject.getLocal("datos");
disco_so.data.elFotograma = fa;
disco_so.data.elFotograma2 = fa2;
disco_so.flush();
}


cuando pones disco_so.data.elFotograma = fa

en la parte de "elFotograma" tengo que asignar el valor del fotograma?

Por flasher95

18 de clabLevel



 

chrome
Citar            
MensajeEscrito el 23 Jul 2012 02:08 am
No entiendo que quieres decir. Pero ahi a elFotograma se le asigna el valor fa.

Por javiert239

38 de clabLevel



 

chrome
Citar            
MensajeEscrito el 23 Jul 2012 02:30 am
o ok creo que ya entendi :)

Por flasher95

18 de clabLevel



 

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.