Volledige versie bekijken : Dynamisch Bestandsoverzicht
flashgek
%Europe/Berlin %720 %2006, 18:17
hallo,
ik ben een site aan het maken in flash en een van de functies van die site is, is dat je kan zien wat voor swf's ik er heb opgezet. een soort index. Ik wil deze graag dynamisch hebben, zodat als ik in een array een bestand er aan toevoeg, er automatisch een button voor wordt aangemaakt met een titel erop. De titel is dan de naam van een van de waardes in de array.
Ik krijg het alleen niet voor elkaar.
dit is wat ik nu heb:
#include "array.as"
_root.attachMovie("btn_bestand", btnNaam[0], 10);
btnNaam[0]._x = btn_bestand._x;
btnNaam[0]._y = btn_bestand._y + 30;
createTextField("button_naam", _root.getNextHighestDepth(), button._x - 50, button._y - 10, 100, 30);
button_naam.replaceText(0, 1, btnNaam[0]);
btn_bestand is de knop waar overzicht op staat. als je hier overheen gaat, krijg je alles bestanden te zien. de buttons zien allemaal onder deze button gesorteerd. alle buttons zijn instanties van btn_bestandoverzicht.
Verder probeer ik de instanties dezelfde naam te geven als de inhoud van de array.
Als laatste dan nog de inhoud van de array: ( dit is trouwens niet nuttig)
btnNaam = new Array();
btnNaam[0] = "Tester";
btnNaam[1] = "Knop";
btnNaam[2] = "Button";
Ik hoop dat jullie de oplossing weten.
Ieder geval alvast bedankt
(dit allemaal is alleen een code voor het basis idee, als dit lukt voeg ik er straks nog een functie aan toe die meerdere buttons maakt en ze onder elkaar zet.)
josko
%Europe/Berlin %725 %2006, 18:25
klein beetje php moet dit tog lukken? alle swf files opzoeken?
of wil je dit alleen met AS doen :?
eagle
%Europe/Berlin %728 %2006, 18:28
Het ziet er allemaal nogal omslachtig uit, ik zou iets in deze aard doen:
var files:Array = Array("file1.swf","file2.swf","file3.swf");
for(var i:Number = 0; i<files.length; i++){
var nieuweknop:MovieClip = _root.attachMovie("btn_bestand", files[i], _root.getNextHighestDepth());
nieuweknop._x = 0;
nieuweknop._y = nieuweknop._width*i + 30;
var txt:TextField = createTextField(...);
}
renegeuze
%Europe/Berlin %728 %2006, 18:29
edit: Bovenstaande post is denk wat duidelijker ;)
var nameArray:Array = ['Home', 'About me', 'Weblog', 'Portfolio', 'Friends', 'Pictures', 'Beer', 'Weblinks', 'Contact', 'Guestbook', 'Music'];
for (i=0; i<nameArray.length; i++) {
attachMovie("button", "button"+i, this.getNextHighestDepth());
buttonEval = eval("button"+i);
buttonEval._x = i*ButtonWidth;
buttonEval.buttonName = nameArray[i];
}
zoiets heb ik.
Waarbij "button" dus in de library zit.
En uiteraard kan je die array weer laten opbouwen aan de hand van een xml oid.
flashgek
%Europe/Berlin %789 %2006, 19:57
hartstikke bedankt mensen,
het ziet er al een stuk beter uit. beter gezegd, hij doet het. alleen het klikken moet nog komen, maar daar ga ik zo verder mee.
vooral eagle bedankt.
Toch heb ik nog een vraagje.
het gaat over deze code:
var txt:TextField = createTextField(txtField, _root.getNextHighestDepth(), xnieuweknop -20, ynieuweknop, 100, 30);
waarom moet je hier eerst een variable genaamd txt maken, waarom kan je niet gewoon dit doen?
createTextField(txtField, _root.getNextHighestDepth(), xnieuweknop -20, ynieuweknop, 100, 30);
want in deze code geef je het textfield toch al een naam?
BEWERKT!!!
en dan de volgende vraag:
nu staat er op mijn knoppen tekst, maar als ik daar met mijn muis overheen ga, dan verandert hij in een I. dat wil ik niet dus wil ik de tekst in static tekst veranderen. hoe doe je dat in actionscript???
eagle
%Europe/Berlin %931 %2006, 23:20
Beide notaties van het textfield zijn equivalent, het is gewoon handig als je met het textfield verder werkt. De variable bevat dan de referentie naar het textfield. Een voorbeeldje verduidelijkt alles:
this.createTextField("headline_txt", this.getNextHighestDepth(), 100, 100, 300, 20);
this["headline_txt"].text = "Some text";
//Kortere (propere) notatie:
var txt:Textfield = this.createTextField("headline_txt", this.getNextHighestDepth(), 100, 100, 300, 20);
txt.text = "something";
txt.eenadnereoptie = ...
....
Het voordeel is dus dat de variable niet afhankelijk is van het eigenlijke adres dat je aan het textfield geeft.
Dat met je knoppen en je tekst snap ik niet zo goed, kan je even verduidlijken?
Btw dankje voor je compliment :)
flashgek
%Europe/Berlin %960 %2006, 00:02
het is zo dat de tekst op de buttons nu dynamisch is, wat inhoud dat als je erover heen gaat de muiscursor verandert in een "I". daardoor kan je de button niet meer aanklikken, tenminste het middelste gedeelte niet meer, want daar zit het tekstvak. daarom heen kan je wel klikken, alleen dat wil ik niet.
Ik moet dus voorkomen dat de muiscursor een I wordt. dat doe je door de tekst "static" te maken i.p.v. "dynamic". Alleen hoe moet je de tekst met AS dynamic maken???
Alvast bedankt!
eagle
%Europe/Berlin %962 %2006, 00:06
Ahh, als volgt:
textfield.selectable = false;
flashgek
%Europe/Berlin %973 %2006, 00:21
ah geweldig, het werkt!
dank je.
ik ben met dit gedoe nog niet klaar, dus overmorgen kan je weer wat vragen verwachten.
Dus topic is nog niet gesloten. ;)
eagle
%Europe/Berlin %984 %2006, 00:37
Ik kijk er al naar uit :)
flashgek
%Europe/Berlin %733 %2006, 18:36
en ik heb weer vragen.
de code doet het onderhand, alleen ik laat nu een movieclip, maar die gaat staan waar hij wil.
var files:Array = ["Jack_de_Ripper",
"Aarde_en_zon",
"Flashgek",
"Preloader",
"Neon_ani_nick",
"Rollende_bal",
"Schoolhaatsmiley",
"Site"];
init();
function init(){
menu = 0;
}
stop();
btn_bestand.onRollOver = function() {
if(menu == 0) {
menu = 1;
xnieuweknop = btn_bestand._x;
ynieuweknop = btn_bestand._y;
for(var i:Number = 0; i<files.length; i++){
nieuweknop = eval("btn_" + files[i]);
_root.attachMovie("btn_bestandoverzicht", "btn_" + files[i],_root.getNextHighestDepth());
nieuweknop = eval("btn_" + files[i]);
ynieuweknop += 30;
nieuweknop._x = xnieuweknop;
nieuweknop._y = ynieuweknop;
nieuweknop.index = i;
txtField = eval("txt_" + files[i]);
var txt:TextField = createTextField(txtField, _root.getNextHighestDepth(), xnieuweknop -40, ynieuweknop -5, 85, 30);
txt.text = files[i];
txt.selectable = false;
nieuweknop.onRelease = function() {
naambestand = files[this.index] + ".swf";
for(var i:Number = 0; i<files.length; i++){
nieuweknop = eval("btn_" + files[i]);
removeMovieclip(nieuweknop);
txt.removeTextField();
}
_root.attachMovie("container", "container", _root.getNextHighestDepth());
container._x = 0;
container._y = 50;
var myMCL:MovieClipLoader = new MovieClipLoader();
myMCL.loadClip(naambestand, "container");
menu = 0;
}
}
}
}
ik zet de container._x op nul, maar toch gaat de geladen swf in het midden staan. Wat ook raar is, is dat ik de container een rand heb gegeven, maar die zie je helemaal niet.
Trouwens verbeteringen op mijn code zijn altijd welkom.
En het laatste probleem is dat dit bestand met deze code het helemaal niet doet op mijn website, maar wel op mijn comp. Hij wordt geeneens geladen. weet iemand hoe dat kan.
Alvast bedankt!
vBulletin® v3.8.1, Copyright ©2000-2012, Jelsoft Enterprises Ltd.