[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;
}
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!:cap: