A Flash Developer Resource Site

Results 1 to 3 of 3

Thread: XML banner. Help needed for timer

  1. #1
    Junior Member
    Join Date
    Apr 2009
    Posts
    4

    XML banner. Help needed for timer

    Hello Everyone. So i want to create an xml banner, but every picture to have her own timer, defined in the xml. for example i want my first picture to disappear after 5 seconds, the 2nd after 3 sec, the 3rd after 2 sec etc.
    my xml looks like this one:

    Code:
    <?xml version="1.0" encoding="utf-8"?>
    <slide DELAY="2">
    <image URL="images/1.jpg" DESCRIPTION="Lorem " DELAY="5"/>
    <image URL="images/2.jpg" DESCRIPTION="Nam blandit" DELAY="2"/>
    <image URL="images/3.jpg" DESCRIPTION="Cras" DELAY="3"/>
    <image URL="images/4.jpg" DESCRIPTION="Nulla sed" DELAY="10"/>
    <image URL="images/5.jpg" DESCRIPTION="Vivamus." DELAY="1"/>
    </slide>
    The action script code looks like this:
    Code:
    import fl.transitions.Tween;
    import fl.transitions.easing.*;
    
    var _delay:int = 0;
    var _total:int = 0;
    var _images:XMLList = null;
    var _loaders:Array = new Array();
    var _counter:int = 0;
    var _next:int = 0;
    var _timer:Timer = null;
    var _tween:Tween = null;
    var _container:Sprite = new Sprite();
    var _text:TextField = new TextField();
    
    var _loader:URLLoader = new URLLoader();
    _loader.load(new URLRequest("data.xml"));
    _loader.addEventListener(Event.COMPLETE, Complete, false, 0, true);
    
    
    function Complete(e:Event):void
    {
        var _xml:XML = new XML(e.target.data);
        
        _loader.removeEventListener(Event.COMPLETE, Complete);
        _loader = null;
        
        
        
        _images = _xml.image;
        _total= _images.length();
    
        LoadImages();
    }
    
    function LoadImages():void
    {
        for (var i:int = 0; i < _total; i++)
        {
        _delay = _images[i].@DELAY;
        trace(_delay)
        
            var _url:String = _images[i].@URL;
            var _loader:Loader = new Loader();
            _loader.load(new URLRequest(_url));
            _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, ImageLoaded);
            _loaders.push(_loader);
            
        }
    }
    
    function ImageLoaded(e:Event):void
    {
        _counter++;
    
        if ( _counter ==  _total)
        {
           SetupSlider();
        }
    
    }
    
    function SetupSlider():void
    {
        addChild(_container);
        
        _text.selectable=false;
        _text.width = 450;
        _text.height = 50;
        _text.x = 0;
        _text.y = 0;
        addChild(_text);
        
        NextImage();
        _timer = new Timer(_delay*1000,0);
        _timer.addEventListener(TimerEvent.TIMER, TimerListener);
        _timer.start();
    }
    
    function TimerListener(e:TimerEvent):void
    {
        _next++;
        
        if (_next == _total)
        {
            _next =0;
        }
    
        NextImage();
    }
    
    function NextImage():void
    {
        if(_container.numChildren>0)
        {
            _container.removeChildAt(0);
        }
        
        _loaders[_next].alpha = 0;
        _container.addChildAt(_loaders[_next],0);
        
        _tween = new Tween(_loaders[_next],"alpha",Strong.easeOut,0,1,1,true);
        
        _text.text = _images[_next].@DESCRIPTION;
    }
    i defined in the xml file the delays for every picture, but i can figure out how to transmit the delays to the timer. please help me. thanks a lot.

  2. #2
    :
    Join Date
    Dec 2002
    Posts
    3,518
    Code:
    import fl.transitions.Tween;
    import fl.transitions.easing.*;
    
    var _delay:int=0;
    var _total:int=0;
    var _images:XMLList=null;
    var _loaders:Array = new Array();
    var _counter:int=0;
    var _next:int=0;
    var _timer:Timer=null;
    var _tween:Tween=null;
    var _container:Sprite = new Sprite();
    var _text:TextField = new TextField();
    
    var _loader:URLLoader = new URLLoader();
    _loader.load(new URLRequest("data.xml"));
    _loader.addEventListener(Event.COMPLETE, Complete, false, 0, true);
    
    function Complete(e:Event):void {
    	var _xml:XML=new XML(e.target.data);
    	_loader.removeEventListener(Event.COMPLETE, Complete);
    	_loader=null;
    	_images=_xml.image;
    	_total=_images.length();
    	LoadImages();
    }
    
    function LoadImages():void {
    	for (var i:int = 0; i < _total; i++) {
    		var _url:String=_images[i].@URL;
    		var _loader:Loader = new Loader();
    		_loader.load(new URLRequest(_url));
    		_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, ImageLoaded);
    		_loaders.push(_loader);
    	}
    }
    
    function ImageLoaded(e:Event):void {
    	_counter++;
    	if (_counter==_total) {
    		SetupSlider();
    	}
    }
    
    function SetupSlider():void {
    	addChild(_container);
    	_text.selectable=false;
    	_text.width=450;
    	_text.height=50;
    	_text.x=0;
    	_text.y=0;
    	addChild(_text);
    	NextImage();
    }
    
    function TimerListener(e:TimerEvent):void {
    	_next++;
    	if (_next==_total) {
    		_next=0;
    	}
    	NextImage();
    }
    
    function NextImage():void {
    	if (_container.numChildren>0) {
    		_container.removeChildAt(0);
    	}
    	_loaders[_next].alpha=0;
    	_container.addChildAt(_loaders[_next],0);
    	_tween=new Tween(_loaders[_next],"alpha",Strong.easeOut,0,1,1,true);
    	_text.text=_images[_next].@DESCRIPTION;
    	_delay=_images[_next].@DELAY;
    	trace(_delay)
    	_timer=new Timer(_delay*1000,1);
    	_timer.addEventListener(TimerEvent.TIMER_COMPLETE, TimerListener, false, 0 ,true);
    	_timer.start();
    }

  3. #3
    Junior Member
    Join Date
    Apr 2009
    Posts
    4
    hey. it worked. thanks a lot. if i can help you someday please mail me at [email protected]. cheers mate

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  




Click Here to Expand Forum to Full Width

HTML5 Development Center