wtorek, 22 listopada 2011

Prosty player video prosto z kodu... 1Kb

W sumie to prawie zapomniałem, że takie rzeczy czasem trzeba robić... bannery flashowe.
To przez nie ludzie nienawidzą flash'a. Samo zło, któremu czasem trzeba sprostać.
Najtrudniejsze są przy tym ograniczenia wagowe pliku, jakie narzucają serwisy.
I tak, trzeba mi było napisać prosty player video. Całość jest wyjaśniona dobrze w dokumentacji adobe. Chciałbym jednak w miarę możliwości pomóc ludziom w potrzebie...
Przykład działania i kod poniżej.




pliki do pobrania: player.fla

wtorek, 8 listopada 2011

zapisywanie XML z kodu

Już wiemy jak zrobić XML'a z wartości obiektów które mamy. Teraz czas go zapisać.
Przedstawiam tę o to prostą klasę. Wywołujemy ją prosto:
createXML.addToXML(TablicaObiektow);

Nasza klasa, po stworzeniu XML'a (nazwy nodów można pozmieniać), wywoła metodę fileReference, która otwiera standardowe okno zapisu pliku. Problemem może być brak możliwości ustalenia domyślnego rozszerzenia dla zapisywanego pliku... cóż taki ficzer.
Bug siedzi na tablicy u Adobe od jakiegoś czasu i czeka na poprawkę.

A oto i klasa:


 package  
 {  
   import flash.display.Sprite;  
   import flash.events.Event;  
   import flash.events.MouseEvent;  
   import flash.utils.ByteArray;  
   import flash.net.FileReference;  
   import flash.net.FileFilter;  
 /**  
  * ...  
  * @author michalSqa(michal@skula.com);  
  */  
    public class createXML extends Sprite   
    {  
     private static var _xml:XML;  
     public function createXML():void   
     {  
     }  
       public static function addToXML(objectsArray:Array):void  
       {  
          _xml = <xml></xml>;  
          for(var object:Object in objectsArray)  
          {  
             //trace("object: "+object);  
             var obj:Object = objectsArray[object];  
             var item:XML = <item />  
             for(var id:String in obj)   
             {  
                trace("id: "+id);  
                var value:Object = obj[id];  
                //trace(id + " = " + value);  
               item.@[id] = value  
             }  
             _xml.appendChild(item);  
          }  
          trace(_xml);  
          _saveXML();  
       }  
     private static function _saveXML():void  
     {  
         var ba:ByteArray = new ByteArray();  
         ba.writeUTFBytes(_xml);  
         var fr:FileReference = new FileReference();              
         fr.addEventListener(Event.SELECT, _onRefSelect);  
         fr.addEventListener(Event.CANCEL, _onRefCancel); //   
         fr.save(ba, "filename.xml"); // wywołuje okno zapisu pliku  
     }  
     private static function _onRefSelect(e:Event):void  
     {  
         trace('select');  
     }  
     private static function _onRefCancel(e:Event):void  
     {  
         trace('cancel');  
     }  
    }  
 }  

tworzenie XML'a z kodu

XML'a zna pewnie każdy, albo każdy się z nim spotkał. Czasem przesiaduje w barach i pije do rana. We flashu i AS3 to często kluczowy sposób na importowanie zestawów informacji/danych. Ale co zrobić kiedy chcemy stworzyć XML'a z informacji zawartych w kodzie?

Pierwsze pytanie to, po co?. Wyobraźcie sobie sytuację kiedy robimy aplikację, mamy dużo elementów do dostosowania i chcemy ich układ zapisać. To trochę jak CMS. Więc, mamy mase informacji, które chcielibyśmy zachować... i co robimy? Zazwyczaj używamy trace() i zapisujemy/kopiujemy/zapamiętujemy... można i tak. Ale lepiej jest poprostu zrobić XML'a, zapisać go automatycznie(o tym niedługo), albo wytrace'ować i wkleić później w kod, albo do pliku.

A tak można to zrobić:

 var testObjectsArray:Array = new Array(  
                              {param_1:001, param_2:329,   param_3:123,   name:"Name_1",   other:"other_1"},  
                              {param_1:002, param_2:6786,   param_3:432,   name:"Name_2",   other:"other_2"},  
                              {param_1:003, param_2:756,   param_3:5653,   name:"Name_3",   other:"other_3"}  
                              );  
 var xml:XML = <myXml></myXml>;  
 function addToXML():void  
 {  
    for(var object:Object in testObjectsArray)  
    {  
       //trace("object: "+object);  
       var obj:Object = testObjectsArray[object];  
       var item:XML = <item />  
       for(var id:String in obj)   
       {  
          //trace("id: "+id);  
          var value:Object = obj[id];  
         item.@[id] = value  
       }  
       xml.appendChild(item);  
    }  
    trace(xml);  
 }  
 addToXML();  

W tym przypadku mam tablicę obiektów, które mają różne właściwości. Tworzymy obiekt XML, a następnie odpalamy funkcję, która tworzy nody w głównym XMLu. Każdy child w nodzie dostaje nazwę właściwości z obiektu i jego wartośc. A na końcu wyrzucamy go w trace(). I mamy zrobionego prostego XMLa, którego możemy sobie zapisać... co dalej? O tym niedługo.

start()

startujemy... będzie głównie as3. Dzisiaj pierwszy wpis, może być ciekawie dla niektórych.

a teraz trochę AR