Comunidad de diseño web y desarrollo en internet online

Juego de plataformas AS3. Collectables, Arrays y Grabado de datos.

Citar            
MensajeEscrito el 12 Sep 2017 02:09 pm
Buenas, estoy haciendo un prototipo para recoger monedas, desaparezcan y que sólo se grabe si toco con el personaje el MovieClip de grabar. Quiero decir, que si toco ese mc, al cerrar el swf y volverlo a abrir, la moneda no debería volver a aparecer.

Llevo muchos días buscando archivos viejos de As2 para convertirlos a As3, pero ha llegado el momento de pedir ayuda. Necesito si alguien me da una estructura y yo seguirla. Hasta ahora lo que tengo es esto:

EN la Clase principal:

Código ActionScript :


                //ARRAYS
      var moneda:Array = new Array();
      var miArray1:Array = [1,1,1];
      var monedasArray1:Array = [];
      var posicionMonedasx:Array = [131.25,232.3,309.25];
      var posicionMonedasy:Array = [138.9,138.9,138.9];

               //VARIABLES
      var tamañoMonedasArray1;
      var a;


En la función constructora:

Código ActionScript :

                if (miSO.data.miArray1Grabado != null)
         {
            miArray1 = miSO.data.miArray1Grabado;
         }

            var i = 0;
         while (i < miArray1.length)
         {
            moneda[i] = new Moneda();
            moneda[i].x = posicionMonedasx[i];
            moneda[i].y = posicionMonedasy[i];
            var monedaPusheada = addChild(moneda[i]);
            monedasArray1.push(monedaPusheada);
            ++i;
         }


Y dentro de la función con listener ENTER_FRAME:

Código ActionScript :


                 tamañoMonedasArray1 = monedasArray1.length;
         a = 0;
         while (a < tamañoMonedasArray1)
         {
            var monedaDentroArray = monedasArray1[a];
            if (monedasArray1[a] != null)
            {

               if (miArray1[a] == 0)
               {
                  monedaDentroArray.gotoAndStop(2);
                                        //(No me deja hacer un removeChild, no se por qué).
               }
               if (protagonista.hitTestObject(monedaDentroArray))
               {
                  miArray1[a] = 0;
                  monedasArray1[a] = null;
                  monedaDentroArray.gotoAndStop(2);

               }
            }
            ++a;
         }

               if (protagonista.hitTestObject(elGrabador))
         {
            miSO.data.miArray1Grabado = miArray1;
            miSO.flush();
         }



El problema que tengo con este código que he hecho es que después de coger una moneda y tocar elGrabador para grabarla, si cierro el programa y vuelvo a tocar cualquiera de las 2 monedas restantes, cierro sin volver a tocar elGrabador y vuelvo a abrir el swf, esas monedas no grabadas ya no aparecen. Espero que no sea un lío, gracias.

Aquí está el swf:



Por chachon2

41 de clabLevel



 

chrome
Citar            
MensajeEscrito el 12 Sep 2017 02:32 pm

Por chachon2

41 de clabLevel



 

chrome
Citar            
MensajeEscrito el 12 Sep 2017 05:12 pm
Acabo de poner un trace en donde el personaje coge la moneda y, si la cojo despues de grabar, la variable
miSO.data.miArray1Grabado se actualiza y se iguala a miArray1, por cada moneda que coja después (debería ser sólo antes) de haber grabado una sóla vez...¿Qué estará pasando? ¿Alguien me podría ayudar?

Por chachon2

41 de clabLevel



 

chrome
Citar            
MensajeEscrito el 14 Sep 2017 02:33 am
No entiendo bien el concepto, pero admito que soy vago para leer. Quieres grabar la posición del juego? Digamos tienes 10 monedas, cogió 4, y cuanto lo vuelves a abrir solo tienen que aparecer 6? Digo solo conceptualmente, no me expliques nada técnico que me pierdo

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 15 Sep 2017 08:52 pm
Básicamente quiero que si recojo una moneda y grabo, que la moneda desaparezca al cerrar el programa y volverlo a abrir. Eso funciona bien. Lo que pasa es que, probando, me dio por grabar antes de coger monedas y luego coger monedas. Cerraba y volvía a abrir, pero desaparecían. Ya lo solucione. La condición de comprobar si el archivo de grabado del principio era distinto de nulo, y su igualación con el array principal de monedas, había que incluirlo al final de la condición del Mc de grabado. Gracias igualmente (hace años me ayudaste con lo mismo para as2) pero esta vez le daba una vuelta mas al tema... Gracias de nuevo, Jorge!
Yeray

Por chachon2

41 de clabLevel



 

chrome
Citar            
MensajeEscrito el 15 Sep 2017 09:20 pm
Ok cool, suerte

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 03 Nov 2019 02:57 am

chachon2 escribió:

Buenas, estoy haciendo un prototipo para recoger monedas, desaparezcan y que sólo se grabe si toco con el personaje el MovieClip de grabar. Quiero decir, que si toco ese mc, al cerrar el swf y volverlo a abrir, la moneda no debería volver a aparecer.

Llevo muchos días buscando archivos viejos de As2 para convertirlos a As3, pero ha llegado el momento de pedir ayuda. Necesito si alguien me da una estructura y yo seguirla. Hasta ahora lo que tengo es esto:

EN la Clase principal:

Código ActionScript :


                //ARRAYS
      var moneda:Array = new Array();
      var miArray1:Array = [1,1,1];
      var monedasArray1:Array = [];
      var posicionMonedasx:Array = [131.25,232.3,309.25];
      var posicionMonedasy:Array = [138.9,138.9,138.9];

               //VARIABLES
      var tamañoMonedasArray1;
      var a;


En la función constructora:

Código ActionScript :

                if (miSO.data.miArray1Grabado != null)
         {
            miArray1 = miSO.data.miArray1Grabado;
         }

            var i = 0;
         while (i < miArray1.length)
         {
            moneda[i] = new Moneda();
            moneda[i].x = posicionMonedasx[i];
            moneda[i].y = posicionMonedasy[i];
            var monedaPusheada = addChild(moneda[i]);
            monedasArray1.push(monedaPusheada);
            ++i;
         }


Y dentro de la función con listener ENTER_FRAME:

Código ActionScript :


                 tamañoMonedasArray1 = monedasArray1.length;
         a = 0;
         while (a < tamañoMonedasArray1)
         {
            var monedaDentroArray = monedasArray1[a];
            if (monedasArray1[a] != null)
            {

               if (miArray1[a] == 0)
               {
                  monedaDentroArray.gotoAndStop(2);
                                        //(No me deja hacer un removeChild, no se por qué).
               }
               if (protagonista.hitTestObject(monedaDentroArray))
               {
                  miArray1[a] = 0;
                  monedasArray1[a] = null;
                  monedaDentroArray.gotoAndStop(2);

               }
            }
            ++a;
         }

               if (protagonista.hitTestObject(elGrabador))
         {
            miSO.data.miArray1Grabado = miArray1;
            miSO.flush();
         }



El problema que tengo con este código que he Onlinesbi [url=https://sudoku.kim/ ]sudoku[/url] incometaxindiaefiling hecho es que después de coger una moneda y tocar elGrabador para grabarla, si cierro el programa y vuelvo a tocar cualquiera de las 2 monedas restantes, cierro sin volver a tocar elGrabador y vuelvo a abrir el swf, esas monedas no grabadas ya no aparecen. Espero que no sea un lío, gracias.

Aquí está el swf:



Ya lo solucione. La condición de comprobar si el archivo de grabado del principio era distinto de nulo, y su igualación con el array principal de monedas, había que incluirlo al final de la condición del Mc de grabado.

Por tayeadil

6 de clabLevel



 

chrome

 

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