Comunidad de diseño web y desarrollo en internet online

Guardar datos as3 en archivo XML usando PHP

Citar            
MensajeEscrito el 15 Ago 2010 08:47 pm
Hola a todos.

Hace poco estuve preguntando por aquí acerca de XML y me enteré de que necesitaba algo como php para almacenar los records en un archivo XML y cargarlos en otra sesión.

Estuve mirando unos tutoriales y he acabado haciendo esto:

En el programa principal (Se trata de un videojuego):

Fotograma 1: Menú principal

Código ActionScript :

var urlRecords:String = "HighScores.xml"; 
var records:Records = new Records(); 
addChild(records);


Fotograma 2: Juego <-- Esto lo hago porque si intento cargar y escribir el archivo en el fotograma de GameOver, me da error siempre.

Código ActionScript :

records.cargarXML(urlRecords); //Precarga


Fotograma 3: GameOVer
Código :

Código ActionScript :

records.escribirXML(puntuacion.toString());


Clase Records:

Código ActionScript :

public function cargarXML(url:String){ 
         cargador.addEventListener(Event.COMPLETE, cargaCompleta); 
         cargador.addEventListener (SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); 
         cargador.addEventListener (IOErrorEvent.IO_ERROR, ioErrorHandler); 
         cargador.load(new URLRequest(url)); 
      } 
  
      private function cargaCompleta(e:Event):void {      //Funcion que se ejecuta cuando termina la carga. 
         cargador.removeEventListener(Event.COMPLETE, cargaCompleta); 
         cargador.removeEventListener (SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); 
         cargador.removeEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); 
         datos = new XML(e.target.data); 
         datos.ignoreWhite = true; 
         var i:int = 0; 
         var miRaiz:XMLList = datos.child("Score"); 
         if (miRaiz != null){ 
            for each(var nodo:XML in miRaiz){ 
               i++; 
               miRoot.textoRecords.text += "#" + i +": " + nodo.nombre + "\t\t" + nodo.puntos + "\n"; 
            } 
         }else{ 
            miRoot.textoRecords.text = "Aún no hay records!!\n"; 
         } 
      } 
       
      public function escribirXML(puntuacion:String){ 
         var temp:String; 
         var miRaiz:XMLList = datos.child("Score"); 
         var j:int = 0; 
         trace("antes del if"); 
         if (miRaiz != null){ 
            trace(miRaiz); 
            for each (var nodo:XML in miRaiz){ 
               j++; 
               //Devuelve el atributo puntuacion 
               trace("antes de temp"); 
               temp = nodo.puntos; 
               if (puntuacion > temp){ 
                  var newNodo:String = "<Score id = \"" + j + "\"><nombre>NuevoRecord</nombre><puntos>"+ puntuacion +"</puntos></Score>"; 
                  trace(nodo[2].nombre); 
                  trace(newNodo); 
                  datos = datos.insertChildBefore(miRaiz.Score[j], newNodo); 
                  //borrar el último record 
                  delete miRaiz[7].children; 
                  trace("miRaiz: " + miRaiz); 
                  trace(nodo.Score[2]); 
                  trace("Datos: " + datos); 
                   
                      var myData:URLRequest = new URLRequest("save.php"); 
                        myData.method = URLRequestMethod.POST; 
                  myData.contentType = "text/xml"; 
                      myData.data = datos; 
                      var loader:URLLoader = new URLLoader(); 
                      loader.dataFormat = URLLoaderDataFormat.VARIABLES; 
                      loader.addEventListener(Event.COMPLETE, dataOnLoad); 
                  loader.addEventListener (IOErrorEvent.IO_ERROR, ioErrorHandler) 
                      loader.load(myData); 
                  break; 
               } 
            } 
         } 
      } 
       
      function dataOnLoad(evt:Event){ 
            try { 
              xmlResponse = new XML(evt.target.data); 
              miRoot.textoRecords.text = xmlResponse; 
              removeEventListener(Event.COMPLETE, dataOnLoad); 
            removeEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); 
          } catch (err:TypeError) { 
              miRoot.textoRecords.text = "An error occured when communicating with server:\n" + err.message; 
          } 
      }


save.php:

Código PHP :

<?php
if (isset($GLOBALS["HTTP_RAW_POST_DATA"])){ 
//    $xml = xmldoc($GLOBALS["HTTP_RAW_POST_DATA"]); 
    $xml = $GLOBALS["HTTP_RAW_POST_DATA"]; 
    $file = fopen("HighScores.xml","wb"); 
    fwrite($file, $xml); 
    fclose($file); 
//    echo("<status>File saved.</status>"); 
    echo($GLOBALS["HTTP_RAW_POST_DATA"]); 
} 
?>


Dado que no tengo ni idea de php, veis vosotros algún problema? No lo graba, y da error en escribirXML() y en cargacompleta(), ambas en Recods.as


Gracias de antemano

Por Cher0

18 de clabLevel



 

chrome
Citar            
MensajeEscrito el 17 Ago 2010 02:24 pm
Si solo necesitas cargar info entonces usar XML está bien, pero si necesitas escribir no uses XML, ya que complejiza el código PHP y es innecesario, usa simplemente un TXT y si es algo local, no siquiera lo necesitas, puedes usar un SharedObject (especie de cookie de Flash) Mirate http://www.flash-db.com/Tutorials/savingAS3/ para ver como escribir datos usando PHP

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox

 

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