A Flash Developer Resource Site

Results 1 to 4 of 4

Thread: [RESOLVED] Dynamic Text from XML

  1. #1
    Junior Member
    Join Date
    Feb 2010
    Posts
    17

    resolved [RESOLVED] Dynamic Text from XML

    Hi Guys - really need to know if this is possible, and if so - please help!

    Please!

    I need to reload data from an external XML into the same dynamic text field on pressing a series of buttons. Each XML file is for a different (human) language.

    Please use the below AS in a new layer in actions - first frame in the timeline. On another layer create a dynamic text box with an instance name of 'theText' in the first frame. On a third later draw four small rectangles and convert them to symbols and give them instance names of 'enBtn', 'plBtn', 'deBtn' and 'nlBtn' respectively.

    Use the icon files and XML files in the attached. Test the movie - you should see a carousel and your four language 'buttons'.

    You will see that if you click on a carousel icon some text will appear. If you click the icon again the text will disappear and the icon will go back to the carousel. If you now click one of the language buttons, you will see that the language associated with the tooltips and contents changes to the target language.

    BUT - here is the problem. If you have one of the icons popped-out so that text is showing, then you change the language using a button, the original text gets 'stuck' on the stage. This needs to be 'destroyed' when the user changes the language, along with all the other carousel items.

    Can anyone please advise how to destroy what is in the dynamic text when a language button is pressed so that it can be reloaded with the new XML when the language is changed???

    Please, please, please help! Getting desperate!!!!!

    BTW, couldn't attach the stripped-down movie to the forums as it was still too big. Are there any workarounds for this - have already removed all images.....

    Thanks,

    lobster_bot

    AS:

    Code:
    import mx.utils.Delegate;
    import mx.transitions.Tween;
    import mx.transitions.easing.*;
    
    var numOfItems:Number;
    var radiusX:Number = 300;
    var radiusY:Number = 75;
    var centerX:Number = Stage.width / 2;
    var centerY:Number = Stage.height / 1.8;
    var speed:Number = 0.05;
    var perspective:Number = 130;
    var home:MovieClip = this;
    theText._visible = false;
    var carouselClips:Array = new Array;
    var currentCarousel:Number = 1;
    
    var tooltip:MovieClip = this.attachMovie("tooltip","tooltip",10000);
    tooltip._alpha = 0;
    
    var xml:XML = new XML();
    xml.ignoreWhite = true;
    
    xml.onLoad = function()
    {
           for (z=0; z<carouselClips.length; z++) {
              removeMovieClip(carouselClips[z]);
           }	
    	var nodes = this.firstChild.childNodes;
    	numOfItems = nodes.length;
    	for(var i=0;i<numOfItems;i++)
    	{
    		var t = home.attachMovie("item","item"+i,i+1);
    		t.angle = i * ((Math.PI*2)/numOfItems);
    		t.onEnterFrame = mover;
    		t.toolText = nodes[i].attributes.tooltip;
    		t.content = nodes[i].firstChild.nodeValue;
    		t.icon.inner.loadMovie(nodes[i].attributes.image);
    		t.r.inner.loadMovie(nodes[i].attributes.image);
    		t.icon.onRollOver = over;
    		t.icon.onRollOut = out;
    		t.icon.onRelease = released;
    		carouselClips.push(t);
    	}
    }
    
    function over()
    {
    	//BONUS Section
    	var sou:Sound = new Sound();
    	sou.attachSound("sover");
    	sou.start();
    	
    	home.tooltip.tipText.text = this._parent.toolText;
    	home.tooltip._x = this._parent._x;
    	home.tooltip._y = this._parent._y - this._parent._height/2;
    	home.tooltip.onEnterFrame = Delegate.create(this,moveTip);
    	home.tooltip._alpha = 100;
    }
    
    function out()
    {
    	delete home.tooltip.onEnterFrame;
    	home.tooltip._alpha = 0;
    }
    
    function released()
    {
    	//BONUS Section
    	var sou:Sound = new Sound();
    	sou.attachSound("sdown");
    	sou.start();
    	
    	home.tooltip._alpha = 0;
    	for(var i=0;i<numOfItems;i++)
    	{
    		var t:MovieClip = home["item"+i];
    		t.xPos = t._x;
    		t.yPos = t._y;
    		t.theScale = t._xscale;
    		delete t.icon.onRollOver;
    		delete t.icon.onRollOut;
    		delete t.icon.onRelease;
    		delete t.onEnterFrame;
    		if(t != this._parent)
    		{
    			var tw:Tween = new Tween(t,"_xscale",Strong.easeOut,t._xscale,0,1,true);
    			var tw2:Tween = new Tween(t,"_yscale",Strong.easeOut,t._yscale,0,1,true);
    			var tw3:Tween = new Tween(t,"_alpha",Strong.easeOut,100,0,1,true);
    		}
    		else
    		{
    			var tw:Tween = new Tween(t,"_xscale",Strong.easeOut,t._xscale,100,1,true);
    			var tw2:Tween = new Tween(t,"_yscale",Strong.easeOut,t._yscale,100,1,true);
    			var tw3:Tween = new Tween(t,"_x",Strong.easeOut,t._x,175,1,true);
    			var tw4:Tween = new Tween(t,"_y",Strong.easeOut,t._y,400,1,true);
    			theText._visible = true;
    			theText.htmlText = t.content;
    			var s:Object = this;
    			tw.onMotionStopped = function()
    			{
    				s.onRelease = unReleased;
    			}
    		}
    	}
    }
    
    function unReleased()
    {
    	//BONUS Section
    	var sou:Sound = new Sound();
    	sou.attachSound("sdown");
    	sou.start();
    	
    	delete this.onRelease;
    	theText._visible = false;
    	for(var i=0;i<numOfItems;i++)
    	{
    		var t:MovieClip = home["item"+i];
    		if(t != this._parent)
    		{
    			var tw:Tween = new Tween(t,"_xscale",Strong.easeOut,0,t.theScale,1,true);
    			var tw2:Tween = new Tween(t,"_yscale",Strong.easeOut,0,t.theScale,1,true);
    			var tw3:Tween = new Tween(t,"_alpha",Strong.easeOut,0,100,1,true);
    		}
    		else
    		{
    			var tw:Tween = new Tween(t,"_xscale",Strong.easeOut,100,t.theScale,1,true);
    			var tw2:Tween = new Tween(t,"_yscale",Strong.easeOut,100,t.theScale,1,true);
    			var tw3:Tween = new Tween(t,"_x",Strong.easeOut,t._x,t.xPos,1,true);
    			var tw4:Tween = new Tween(t,"_y",Strong.easeOut,t._y,t.yPos,1,true);
    			tw.onMotionStopped = function()
    			{
    				for(var i=0;i<numOfItems;i++)
    				{
    					var t:MovieClip = home["item"+i];
    					t.icon.onRollOver = Delegate.create(t.icon,over);
    					t.icon.onRollOut = Delegate.create(t.icon,out);
    					t.icon.onRelease = Delegate.create(t.icon,released);
    					t.onEnterFrame = mover;
    				}
    			}
    		}
    	}
    }
    
    
    function moveTip()
    {
    	home.tooltip._x = this._parent._x;
    	home.tooltip._y = this._parent._y - this._parent._height/2;
    }
    enBtn.onRelease = function() {
    
         switch (currentCarousel)
         {
              default:
                   xml.load("icons_en.xml");
                   currentCarousel = 1;
                   break;
         }
    }	
    plBtn.onRelease = function() {
    
         switch (currentCarousel)
         {
              default:
                   xml.load("icons_pl.xml");
                   currentCarousel = 3;
                   break;
         }
    }
    deBtn.onRelease = function() {
    
         switch (currentCarousel)
         {
              default:
                   xml.load("icons_de.xml");
                   currentCarousel = 2;
                   break;
         }
    }
    nlBtn.onRelease = function() {
    
         switch (currentCarousel)
         {
              default:
                   xml.load("icons_nl.xml");
                   currentCarousel = 4;
                   break;
         }
    }
    
    xml.load("icons_en.xml");
    
    function mover()
    {
    	this._x = Math.cos(this.angle) * radiusX + centerX;
    	this._y = Math.sin(this.angle) * radiusY + centerY;
    	var s = (this._y - perspective) /(centerY+radiusY-perspective);
    	this._xscale = this._yscale = s*100;
    	this.angle += this._parent.speed;
    	this.swapDepths(Math.round(this._xscale) + 100);
    }
    
    this.onMouseMove = function()
    {
    	speed = (this._xmouse-centerX)/14000;
    }
    Last edited by lobster_bot; 12-13-2010 at 04:22 PM. Reason: Slight change to AS

  2. #2
    Junior Member
    Join Date
    Feb 2010
    Posts
    17
    Hi!

    Aaaah, came very close to what I thought was a 'solution'!!!

    I can clear the dynamic text from the stage and reload the carousel at runtime with the contents from the target XML file on clicking each flag button. Sadly, I can only do it ONE TIME per flag!!!

    Once I have tested each of the flags, the carousel stays in English - weird, I know. I really have reached the end of my small knowledg eof Flash at this stage - please can somebody give us a clue!!!

    The part of the AS I changed to reach the above sorrowful result was this for each language button:

    Actionscript Code:
    enBtn.onRelease = function() {

         switch (currentCarousel)
         {
              default:
                   xml.load("icons_en.xml");
                   currentCarousel = 1;
                   break;
         }
            delete this.onRelease;
        theText._visible = false;
    }  
    plBtn.onRelease = function() {

         switch (currentCarousel)
         {
              default:
                   xml.load("icons_pl.xml");
                   currentCarousel = 3;
                   break;
         }
            delete this.onRelease;
        theText._visible = false;
    }
    deBtn.onRelease = function() {

         switch (currentCarousel)
         {
              default:
                   xml.load("icons_de.xml");
                   currentCarousel = 2;
                   break;
         }
            delete this.onRelease;
        theText._visible = false;
    }
    nlBtn.onRelease = function() {

         switch (currentCarousel)
         {
              default:
                   xml.load("icons_nl.xml");
                   currentCarousel = 4;
                   break;
         }
            delete this.onRelease;
        theText._visible = false;
    }

    xml.load("icons_en.xml");
        delete this.onRelease;
        theText._visible = false;

    I just want to enable users of the site to change languages as much as possible - please let me know where I am being dumb!!

    Thanks!

    lobster_bot

  3. #3
    :
    Join Date
    Dec 2002
    Posts
    3,518
    Code:
    import mx.utils.*;
    import mx.transitions.*;
    import mx.transitions.easing.*;
    
    var numOfItems:Number;
    var radiusX:Number = 300;
    var radiusY:Number = 75;
    var centerX:Number = Stage.width / 2;
    var centerY:Number = Stage.height / 1.8;
    var speed:Number = 0.05;
    var perspective:Number = 130;
    var home:MovieClip = this;
    var numPicked:Number = -1;
    theText._visible = false;
    var carouselClips:Array = new Array();
    
    var tooltip:MovieClip = this.attachMovie("tooltip", "tooltip", 10000);
    tooltip._alpha = 0;
    
    var xml:XML = new XML();
    xml.ignoreWhite = true;
    
    xml.onLoad = function() {
    	var firstTime = (carouselClips.length == 0) ? true : false;
    	var nodes = this.firstChild.childNodes;
    	numOfItems = nodes.length;
    	for (var i = 0; i < numOfItems; i++) {
    		if (firstTime) {
    			var t = home.attachMovie("item", "item" + i, i + 1);
    			t.angle = i * ((Math.PI * 2) / numOfItems);
    			t.onEnterFrame = mover;
    			t.icon.onRollOver = over;
    			t.icon.onRollOut = out;
    			t.icon.onRelease = released;
    			carouselClips[i] = t;
    		}
    		carouselClips[i].content = nodes[i].firstChild.nodeValue;
    		carouselClips[i].icon.inner.loadMovie(nodes[i].attributes.image);
    		carouselClips[i].r.inner.loadMovie(nodes[i].attributes.image);
    		carouselClips[i].toolText = nodes[i].attributes.tooltip;
    		if (numPicked == i) {
    			theText.htmlText = carouselClips[i].content;
    		}
    	}
    };
    
    function over() {
    	//BONUS Section
    	var sou:Sound = new Sound();
    	sou.attachSound("sover");
    	sou.start();
    	home.tooltip.tipText.text = this._parent.toolText;
    	home.tooltip._x = this._parent._x;
    	home.tooltip._y = this._parent._y - this._parent._height / 2;
    	home.tooltip.onEnterFrame = Delegate.create(this, moveTip);
    	home.tooltip._alpha = 100;
    }
    
    function out() {
    	delete home.tooltip.onEnterFrame;
    	home.tooltip._alpha = 0;
    }
    
    function released() {
    	//BONUS Section
    	var sou:Sound = new Sound();
    	sou.attachSound("sdown");
    	sou.start();
    
    	home.tooltip._alpha = 0;
    	for (var i = 0; i < numOfItems; i++) {
    		var t:MovieClip = home["item" + i];
    		t.xPos = t._x;
    		t.yPos = t._y;
    		t.theScale = t._xscale;
    		delete t.icon.onRollOver;
    		delete t.icon.onRollOut;
    		delete t.icon.onRelease;
    		delete t.onEnterFrame;
    		if (t != this._parent) {
    			var tw:Tween = new Tween(t, "_xscale", Strong.easeOut, t._xscale, 0, 1, true);
    			var tw2:Tween = new Tween(t, "_yscale", Strong.easeOut, t._yscale, 0, 1, true);
    			var tw3:Tween = new Tween(t, "_alpha", Strong.easeOut, 100, 0, 1, true);
    		} else {
    			var tw:Tween = new Tween(t, "_xscale", Strong.easeOut, t._xscale, 100, 1, true);
    			var tw2:Tween = new Tween(t, "_yscale", Strong.easeOut, t._yscale, 100, 1, true);
    			var tw3:Tween = new Tween(t, "_x", Strong.easeOut, t._x, 175, 1, true);
    			var tw4:Tween = new Tween(t, "_y", Strong.easeOut, t._y, 400, 1, true);
    			theText._visible = true;
    			theText.htmlText = t.content;
    			var s:Object = this;
    			tw.onMotionStopped = function() {
    				s.onRelease = unReleased;
    			};
    			numPicked = i;
    		}
    	}
    }
    
    function unReleased() {
    	//BONUS Section
    	var sou:Sound = new Sound();
    	sou.attachSound("sdown");
    	sou.start();
    
    	delete this.onRelease;
    	theText._visible = false;
    	for (var i = 0; i < numOfItems; i++) {
    		var t:MovieClip = home["item" + i];
    		if (t != this._parent) {
    			var tw:Tween = new Tween(t, "_xscale", Strong.easeOut, 0, t.theScale, 1, true);
    			var tw2:Tween = new Tween(t, "_yscale", Strong.easeOut, 0, t.theScale, 1, true);
    			var tw3:Tween = new Tween(t, "_alpha", Strong.easeOut, 0, 100, 1, true);
    		} else {
    			var tw:Tween = new Tween(t, "_xscale", Strong.easeOut, 100, t.theScale, 1, true);
    			var tw2:Tween = new Tween(t, "_yscale", Strong.easeOut, 100, t.theScale, 1, true);
    			var tw3:Tween = new Tween(t, "_x", Strong.easeOut, t._x, t.xPos, 1, true);
    			var tw4:Tween = new Tween(t, "_y", Strong.easeOut, t._y, t.yPos, 1, true);
    			tw.onMotionStopped = function() {
    				for (var i = 0; i < numOfItems; i++) {
    					var t:MovieClip = home["item" + i];
    					t.icon.onRollOver = Delegate.create(t.icon, over);
    					t.icon.onRollOut = Delegate.create(t.icon, out);
    					t.icon.onRelease = Delegate.create(t.icon, released);
    					t.onEnterFrame = mover;
    				}
    			};
    		}
    	}
    }
    
    
    function moveTip() {
    	home.tooltip._x = this._parent._x;
    	home.tooltip._y = this._parent._y - this._parent._height / 2;
    }
    enBtn.onRelease = function() {
    	xml.load("icons_en.xml");
    };
    plBtn.onRelease = function() {
    	xml.load("icons_pl.xml");
    };
    deBtn.onRelease = function() {
    	xml.load("icons_de.xml");
    };
    nlBtn.onRelease = function() {
    	xml.load("icons_nl.xml");
    };
    
    xml.load("icons_en.xml");
    
    function mover() {
    	this._x = Math.cos(this.angle) * radiusX + centerX;
    	this._y = Math.sin(this.angle) * radiusY + centerY;
    	var s = (this._y - perspective) / (centerY + radiusY - perspective);
    	this._xscale = this._yscale = s * 100;
    	this.angle += this._parent.speed;
    	this.swapDepths(Math.round(this._xscale) + 100);
    }
    
    this.onMouseMove = function() {
    	speed = (this._xmouse - centerX) / 14000;
    };

  4. #4
    Junior Member
    Join Date
    Feb 2010
    Posts
    17

    resolved Resolved! Excellent Advice - Thanks!

    Followed your advice and it was a perfect solution! I had come up with something 'hacky' in the meantime, but it was no-where as good as yours.

    Thanks again!

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