vinTagesworld Flash forum
Hey,
Ik ben een flash n00bje dat is begonnen aan zijn eerste projectje, grafieken in flash. De data wordt uiteraard berekend in PHP. Ik wil deze met de LoadVars class doorzenden naar flash. Ik heb nu de volgende code:
actionscript codevar url = new LoadVars ();
_root.name = trace (url.name);
txt_name.text = _root.name;
Wanneer ik de volgende URL intik, doet hij het perfect.
quote :
/flash/grafieken/lijn.swf?name=Browsers
Wanneer deze URL complexer wordt, wilt hij de animatie niet meer laden. Het gaat over de volgende 2 urls:
quote :
/flash/grafieken/lijn.swf?name=Browsers&count=7&item1_key=MS Internet Explorer 6.0&item1_value=50.00%&item2_key=Mozilla Firefox 1.5.0.8&item2_value=14.29%&item3_key=W3C HTML Validator 1.432.2.22&item3_value=7.14%&item4_key=MS Internet Explorer 7.0&item4_value=7.14%&item5_key=Mozilla Firefox 1.0.6&item5_value=7.14%&item6_key=Mozilla Firefox 2.0&item6_value=7.14%&item7_key=Onbekend&item7_value=7.14%
/flash/grafieken/lijn.swf?name=Besturingssystemen&count=2&item1_key=Windows XP&item1_value=85.71%&item2_key=Onbekend&item2_value=14.29%
Ik vermoed dat het probleem iets te maken heeft met tekens dat niet in de URL kunnen. Ik heb geen idee welk teken de boosdoener is. De vraag is dus: welk is de boosdoener, en is er een manier dat ik deze eventueel toch kan doorsturen? De meeste van die tekens kunnen wel omgezet worden naar alternatieve zever, vb. %20 (spatie), maar kan flash dit dan wel uitlezen?
Verder meen ik me te herinneren dat zo'n URL maar 255 tekens mag bevatten (ofzoiets). Is er niet een betere manier om die informatie in flash te krijgen?
laatst ge-edit op: 01-12-06 om 21:18
Welkom eXziBit!
Het gaat fout met het
% teken.
Na iets_value=iets
% is de string om zeep.
Volgens
macromedia/adobe kan je die omzetten naar
%25 maar ook dat werkte niet.
Oplossing, skip dat % karakter, en plak dat er gewoon zelf achter in flash.
Als je dat niet doet (en die var op eoa manier binnen weet te halen inclusief het % teken) heb je de kans dat je de variable eerst om moet zetten naar een string, daar vervolgens het "character" af moet kappen om een int over te houden...
vbactionscript codea = 1;
b = 2%;
c = a+b;
trace (c);//een dikke error
//dus grafiek._yscale zal ook niet werken!
quote exibit :
Is er niet een betere manier om die informatie in flash te krijgen?
Een andere wel [meerdere zelfs] maar het gaat altijd om hetzelfde resultaat, een lange string met daarin een hoop characters en vage tekens, die flash zelf moet zien te ontcijferen.
En die loadVars heb je helemaal niet nodig, je haalt de vars al uit de filenaam/url, en trace als var, dat zal ook niet werken :p
laatst ge-edit op: 02-12-06 om 09:13
Oké, dta heb ik aan de praat gekregen. In de plaats heb ik nu weer 2 andere problemen ;)
Ten eerste heb ik een rechthoek getekend, wat nu een symbol is geworden. Hoe kan ik deze mee laten rekken met de tekst? (de effen oranje achtergrond in de titel)
Ten tweede probeer ik alle info op te vragen en krijg ik undefined. Een idee waarom?
Mijn FLA kan je
hier vinden.
Over die achtergrond:
Je moet die graphic nog converteren naar een movieClip (het is nu een graphic).
Dat converteren doe je gewoon door dat oranje vak te selecteren en dan klik je op
f8.
Vink dat de optie
movie aan en geef het beestje dan een naam (maakt niet uit welke)
Geef die movieclip dan een
instanceNaam (die is wel belangrijk).
In je code zet je dan:
actionscript codeinstanceNaamVanOranjeVlak._width = txt_name._width;
En klaar is klara :)
Die undefined kan je opsporen door te gaan tracen :p (zie vorige post) maar buiten dat is er iets niet helemaal juist met je fla, als ik hem publisch krijg ik een waarschuwing dat de swf in een oneindige loop zit (en die breek ik dus af dan :p)
possible reasons:_root.data_names[
$i] = trace (url.key + 1);
_root.data_values[
$i] = trace (url.value + i);
(hehe php addict :p )
Trace kan je niet gebruiken als variable, trace is developer only en doet niets meer dan een output venster tonen met daarin de gegevens die je wilt tracen.
Ook dat in arrays pompen etc lijkt mij een beetje overbodig, je hebt gewoon je vars in de url staan, dus kan je gewoon zeggen:
actionscript codeitem1_key.text = item1_value;
item2_key.text = item2_value;
//etc
//of
grafiekLijnVoorFireFoxMC._xscale = item2_value;//past de breedte aan
laatst ge-edit op: 02-12-06 om 21:37
Het eerste probleem is verholpen (die oranje bg). De LoadVars en de trace () zijn ook verleden tijd. Bij het tweede is die loop e/d wel nodig omdat het aantal items variabel is. In de eene grafiek komen vb. 7 items, in de andere maar 2. Dit levert het probleem op dat ik dus niet gewoon item2_value kan typen, aangezien ik niet eens zeker weet dat die bestaat!
Ik doe nu dit:
actionscript codefor (i = 1; i <= _root.count; i++) {
str_key = "item" + i + "_key";
str_value = "item" + i + "_value";
_root.keys[i] = str_key;
_root.values[i] = str_values;
txt_debug.text = txt_debug.text + "\n" + i + ") " + str_key + ": " + str_value;
}
In dit geval ziet hij het hele boeltje als een string en niet als een variable, dus krijg ik een lijst met X) itemX_key: itemX_value.
Ik heb het dan ook is geprobeerd zonder die "n, maar dan probeert hij de integers item, i en _value/_key op te tellen.
Om het even iets makkelijker te maken voor mij, hoe ziet nu je url eruit ?
Want als je url gewoon geldig is, dan kan je namelijk gewoon de variabelen pakken uit die url en daarmee werken.
Je hoeft niet om te zetten naar een string imo, maar het kan zijn dat ik je ergens niet begrijp..
De URL is:
/flash/grafieke/cirkel.swf?name=Browsers&count=7&item1_key=MS Internet Explorer 6.0&item1_value=50.00&item2_key=Mozilla Firefox 1.5.0.8&item2_value=14.29&item3_key=W3C HTML Validator 1.432.2.22&item3_value=7.14&item4_key=MS Internet Explorer 7.0&item4_value=7.14&item5_key=Mozilla Firefox 1.0.6&item5_value=7.14&item6_key=Mozilla Firefox 2.0&item6_value=7.14&item7_key=Onbekend&item7_value=7.14
Dus dezelfde URL maar zonder de %'n.
Het probleem is dat het aantal items niet altijd gelijk is. Nu is count gelijk aan 7, dus er zijn 7 items. In een loop moeten deze allemaal opgevraagd worden. Ik kan dus niet gewoon de var item5_key opvragen aangezien deze 5 misschien wel niet eens bestaat... 5 moet dus vervangen worden door de integer i. Ik moet dus een var opvragen waar een var in zit ;)
laatst ge-edit op: 03-12-06 om 20:48
resultaatAls je een beetje prutst met de url, dan zie je dat hij echt wel dynamisch is.
De enige voorwaarde is (in mijn voorbeeldje) dat je niet meer dan 8 items kan tonen.
(en natuurlijk kan je de var namen niet aanpassen in de url)Als je de fla aanpast kan je er zoveel maken als je zelf wilt natuurlijk.
Ik heb het voorbeeldje zo gemaakt dat als item
?_key undefined was, dan gebeurd er niets, als die wel bestaat, dan plaatst flash een movieclip op de scene, de item
?_value komt dan in het textvak van desbetreffende movieclip.
Alles heb ik gewoon 8 keer gechecked op aanwezigheid van die item key, dus een deftige for loop zit er niet in, maar dat lukte me niet zo snel :p
actionscript codei=0;
if (item1_key != undefined) {
i++;
/*
toonMc is de movieclip met die gekleurde balk op de achtergrond
Op die balk zit een textvak genaamd key
Onder die balk zit een textveldje genaamd value
*/
attachMovie("toonMc", "toonMc"+i, this.getNextHighestDepth(), {_x:i*35});
this["toonMc"+i].key.text = item1_key;
this["toonMc"+i].value.text = item1_value+"%";
this["toonMc"+i].balk._yscale = item1_value;
}
if (item2_key != undefined) {
i++;
attachMovie("toonMc", "toonMc"+i, this.getNextHighestDepth(), {_x:i*35});
this["toonMc"+i].key.text = item2_key;
this["toonMc"+i].value.text = item2_value+"%";
this["toonMc"+i].balk._yscale = item2_value;
}
//etc..
fla die de url uitleest en er iets mee doet.
laatst ge-edit op: 04-12-06 om 00:10
In elk geval al bedankt, maar... Kan je die FLA is opslaan als een MX 2004 document? :$ Nog geen zin gehad om up te graden...
done, zelfde url.
Dit topic is gesloten.