Pages

Friday, February 11, 2011

AS3: Minimum code required to load XML at run-time

Minimum code required to load XML at run-time is given below:

SOURCE CODE
var urlLoader:URLLoader = new URLLoader();
urlLoader.addEventListener (Event.COMPLETE, onEventComplete);
urlLoader.load (new URLRequest('Database.xml'));

function onEventComplete (e:Event):void
{
  var Xml:XML = new XML(URLLoader(e.target).data);
  trace (Xml);
}


AS3: How to dynamically load image in movieclip

Here is a minimum code required to load an image in movieclip.

SOURCE CODE
var loader:Loader = new Loader();
loader.load(new URLRequest('img_01.jpg'));
mc.addChild(loader);
Note: mc is a movieclip instance present on stage.

AS3: How to load XML in swf at run-time

We can load xml file into swf at run-time by using following class.

SOURCE CODE
 package   
 {  
  import flash.display.Sprite;  
  import flash.events.*;  
  import flash.net.*;  
  /**  
  * @file CLoader.as  
  * @author Abhishek Kumar  
  */  
  public class CLoader extends Sprite   
  {  
   private var oDispatcher:CDispatcher;  
   public function CLoader()  
   {  
    oDispatcher = CDispatcher.getInstance();  
   }  
   public function retrieve(iXml:String):void  
   {  
    var loader:URLLoader = new URLLoader();  
    configureListeners(loader);  
    var request:URLRequest = new URLRequest(iXml);  
    try   
    {  
     loader.load(request);  
    }   
    catch (error:Error)   
    {  
     trace("Loading failed!");  
    }  
   }  
   private function configureListeners(dispatcher:IEventDispatcher):void   
   {  
    dispatcher.addEventListener(Event.COMPLETE, completeHandler);  
    dispatcher.addEventListener(Event.OPEN, openHandler);  
    dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler);  
    dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);  
    dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);  
    dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);  
   }  
   private function completeHandler(event:Event):void   
   {  
    trace("CLoader -> completeHandler: " + event);  
    var loader:URLLoader = URLLoader(event.target);  
    var Xml:XML = new XML(loader.data);  
    oDispatcher.dispatch(CDispatcher.ACTION, Xml);  
   }  
   private function openHandler(event:Event):void   
   {  
    trace("CLoader -> openHandler: " + event);  
   }  
   private function progressHandler(event:ProgressEvent):void   
   {  
    trace("CLoader -> progressHandler loaded:" + event.bytesLoaded + " total: " + event.bytesTotal);  
   }  
   private function securityErrorHandler(event:SecurityErrorEvent):void   
   {  
    trace("CLoader -> securityErrorHandler: " + event);  
   }  
   private function httpStatusHandler(event:HTTPStatusEvent):void   
   {  
    trace("CLoader -> httpStatusHandler: " + event);  
   }  
   private function ioErrorHandler(event:IOErrorEvent):void   
   {  
    trace("CLoader -> ioErrorHandler: " + event);  
   }  
  }  
 }  

USAGE
import CLoader;
var oLoader:CLoader = new CLoader();
oLoader.retrieve ('Database.xml');

XML (sample)
<?xml version="1.0" encoding="utf-8" ?>
<data>
  <item index="1" image_path="img_1.jpg" thumbnail_path="thumb_1.jpg" /> 
  <item index="2" image_path="img_2.jpg" thumbnail_path="thumb_2.jpg" />
  <item index="3" image_path="img_3.jpg" thumbnail_path="thumb_3.jpg" /> 
  <item index="4" image_path="img_4.jpg" thumbnail_path="thumb_4.jpg" /> 
  <item index="5" image_path="img_5.jpg" thumbnail_path="thumb_5.jpg" /> 
  <item index="6" image_path="img_6.jpg" thumbnail_path="thumb_6.jpg" /> 
  <item index="7" image_path="img_7.jpg" thumbnail_path="thumb_7.jpg" /> 
  <item index="8" image_path="img_8.jpg" thumbnail_path="thumb_8.jpg" /> 
  <item index="9" image_path="img_9.jpg" thumbnail_path="thumb_9.jpg" />
</data>

AS3: How to create custom event dispatcher class

We can create custom event dispatcher class as given below:

SOURCE CODE
package 
{
  import flash.events.EventDispatcher;
  import flash.events.Event;

  /**
   * @file CDispatcher.as
   * @author Abhishek Kumar
   */
  public class CDispatcher extends EventDispatcher
  {
    public static var ACTION:String = "action";
    public static var ERROR:String = "error";

    private static var instance:CDispatcher = new CDispatcher();

    public function CDispatcher() 
    {
      if (instance) 
        throw new Error("Error: Instantiation failed!");
    }

    public static function getInstance():CDispatcher 
    {
      return instance;
    }

    public function dispatch(e:String, o:Object=null):void 
    {
      dispatchEvent(new CEvent(e, o));
    }
  }
}

USAGE
import CDispatcher;
import CEvent;

var oDispatcher:CDispatcher = CDispatcher.getInstance();
oDispatcher.addEventListener (CDispatcher.ACTION, actionHandler);
oDispatcher.addEventListener (CDispatcher.ERROR, errorHandler);

function actionHandler (e:CEvent):void
{
  trace ("actionHandler: " + e);
}

function errorHandler (e:CEvent):void
{
  trace ("errorHandler: " + e.data);
}

/* 
* Anywhere inside custom made class
*/

private var oDispatcher:CDispatcher;
oDispatcher = CDispatcher.getInstance();
oDispatcher.dispatch(CDispatcher.ACTION);
oDispatcher.dispatch(CDispatcher.ERROR, 'Error#007');

AS3: How to create custom event class with extra parameters

We can create a custom event class with extra properties to pass data with it. The source code is given below.

SOURCE CODE
package 
{
  import flash.events.Event;

  /**
  * @file CEvent.as
  * @author Abhishek Kumar
  */
  public class CEvent extends Event
  {
    public static const CUSTOM_EVENT: String = "custom_event";

    public var data:Object;

    public function CEvent(type:String, data:Object, bubbles:Boolean=false, cancelable:Boolean=false)
    {
      super(type, bubbles, cancelable);
      this.data = data;
    }

    override public function clone():Event
    {
      return new CEvent(type, data, bubbles, cancelable);
    } 
  }
}
--
Note: Here we can dispatch event as show below:
dispatchEvent(new CEvent(CEvent.CUSTOM_EVENT, objekt));

AS3: How to pass extra parameter in listener function

Trick for ActionScript-3 to pass extra parameter in the listener function.

SOURCE CODE
mc.addEventListener(MouseEvent.CLICK, foo("Wow!"));

function foo(str:String)
{
   return function(e:MouseEvent) { trace(str); }
}
OUTPUT
Wow!