Volledige versie bekijken : unload in as3
darkslayer
%Europe/Berlin %730 %2007, 17:31
ik had een vraagje, ik heb een functie die plaatjes en swf files enzo kan loaden. Maar mijn vraag is hoe kan ik ze nou weer unloaden uit de holder?? Kan iemand zeggen hoe ik de unLoad functie moet schrijven. ik kom er niet echt uit.
ImageLoad(plaatjes[i],boxHolder["box" + i].holder);
function ImageLoad(u:String,target){
var targetClip = target;
var _loader:Loader = new Loader();
var request:URLRequest = new URLRequest(u);
_loader.load(request);
targetClip.addChild(_loader);
}
function unLoad(???????){
????????
}
B-Mantis
%Europe/Berlin %744 %2007, 17:52
in de flash help; onder Loader class:
unload():void
Removes a child of this Loader object that was loaded by using the load() method.
darkslayer
%Europe/Berlin %760 %2007, 18:15
ja, maar hoe gebruik ik hem, ik was er zelf ook al achter dat ik unload moest gebruiken. De boxen worden geladen via een loop, 10 boxen in de stage, Dat die ik met een for loop. Dus om de ImageLoad bovenaan de code, staat eigenlijk nog een for loop. Hoe kan ik ook weer met een for loop in een keer alle boxen unloaden?? Wat moet ik dan ipv de vraagtekens die ik in de code gezet heb zetten?
ik wil de functie unload dus zo aanroepen:
for (i=0; i<10;i++) {
unLoad(boxHolder["box" + i].holder);
}
B-Mantis
%Europe/Berlin %768 %2007, 18:27
nee, je hebt de load functie gebruikt op de Loader _loader, dus je zult die loaders weer moeten zien te achterhalen.
Maar ik zie niet waarom je ze probeert te unloaden, de Loaders zijn allemaal plaatselijke variabelen (dus geen referentie over), dus als je simpelweg alle Loader instances van de displaylist haalt, zullen ze netjes worden gegarbage-collect.
Je krijgt dan zoiets:
for (i=0; i<total_boxes;i++) {
boxHolder["box" + i].holder.removeChildAt(0);
}
//hier ga ik ervan uit dat er geen andere children in de holder zitten
theFlashWizard
%Europe/Berlin %822 %2007, 19:43
boxHolder["box" + i].holder
Zou ik niet meer doen in as3.0. Op die manier loop je typechecking mis en creëer je veel afhankelijkheden in je code.
darkslayer
%Europe/Berlin %827 %2007, 19:52
het werkt voor geen meter, ik krijg het echt niet werkend:
hier de hele code:
stop();
this.buttonMode = true;
var urlLoader:URLLoader = new URLLoader();
var titles:Array = new Array();
var plaatjes:Array = new Array();
var linksGroot:Array = new Array();
var page:Number = 1;
urlLoader.addEventListener(Event.COMPLETE, loadXML);
urlLoader.load(new URLRequest('movies.xml'));
function loadXML(event:Event):void
{
var xml:XML = new XML(event.target.data);
var total:Number = xml.children().length();
xml.ignoreWhite = true;
for (var i:Number = 0; i < total; i++) {
titles[i] = xml.children().TITLE.children()[i];
plaatjes[i] = xml.children().PLAATJE.children()[i];
linksGroot[i] = xml.children().LINKGROOT.children()[i];
}
if (page == 1) {
for (i=0; i<=7; i++)
{
ImageLoad(plaatjes[i],boxHolder["box"+(i+1)].holder);
}
ImageLoad("next.swf",boxHolder.boxnext.holder);
ImageLoad("vorige.swf",boxHolder.boxpre.holder);
boxHolder.boxnext.addEventListener(MouseEvent.MOUS E_DOWN, volgende);
} else if (page == 2) {
for (i=8; i<=15; i++)
{
ImageLoad(plaatjes[i],boxHolder["box"+(i-7)].holder);
}
ImageLoad("vorige.swf",boxHolder.boxpre.holder);
ImageLoad("next.swf",boxHolder.boxnext.holder);
boxHolder.boxpre.addEventListener(MouseEvent.MOUSE _DOWN, vorige);
boxHolder.boxnext.addEventListener(MouseEvent.MOUS E_DOWN, volgende);
} else if (page == 3) {
for (i=16; i<=23; i++)
{
ImageLoad(plaatjes[i],boxHolder["box"+(i-15)].holder);
}
ImageLoad("vorige.swf",boxHolder.boxpre.holder);
ImageLoad("next.swf",boxHolder.boxnext.holder);
boxHolder.boxpre.addEventListener(MouseEvent.MOUSE _DOWN, vorige);
boxHolder.boxnext.addEventListener(MouseEvent.MOUS E_DOWN, volgende);
} else if (page == 4) {
for (i=24; i<=31; i++)
{
ImageLoad(plaatjes[i],boxHolder["box"+(i-23)].holder);
}
ImageLoad("vorige.swf",boxHolder.boxpre.holder);
ImageLoad("next.swf",boxHolder.boxnext.holder);
boxHolder.boxpre.addEventListener(MouseEvent.MOUSE _DOWN, vorige);
boxHolder.boxnext.addEventListener(MouseEvent.MOUS E_DOWN, volgende);
} else if (page == 5) {
for (i=32; i<=37; i++)
{
ImageLoad(plaatjes[i],boxHolder["box"+(i-31)].holder);
}
ImageLoad("vorige.swf",boxHolder.boxpre.holder);
ImageLoad("next.swf",boxHolder.boxnext.holder);
boxHolder.boxpre.addEventListener(MouseEvent.MOUSE _DOWN, vorige);
}
}
function ImageLoad(u:String,target){
var targetClip = target;
var _loader:Loader = new Loader();
var request:URLRequest = new URLRequest(u);
_loader.load(request);
targetClip.addChild(_loader);
}
function volgende(event:MouseEvent):void
{
for (var j:int = 1; j<=8; j++)
{
boxHolder["box" + j].holder.removeChildAt(0);
}
page++;
if (page > 6) { page = 1;}
urlLoader.load(new URLRequest('movies.xml'));
}
function vorige(event:MouseEvent):void
{
for (var j:int = 1; j<=8; j++)
{
boxHolder["box" + j].holder.removeChildAt(0);
}
page--;
if (page < 1) { page = 5;}
urlLoader.load(new URLRequest('movies.xml'));
}
en mijn xml: xml (http://tfdesign.nl/ff/movies.xml)
en wat ik nu heb, probeer maar is op volgende te drukken, dit gaat nog maar als je op vorige drukt dan doet ie het gelijk niet meer.
wat ik nu heb (http://tfdesign.nl/ff/test.swf)
ik krijg de heletijd de volgende errors:
Error #2044: Unhandled IOErrorEvent:. text=Error #2035: URL Not Found.
RangeError: Error #2006: The supplied index is out of bounds.
at flash.display::DisplayObjectContainer/removeChildAt()
at test_fla::MainTimeline/volgende()
RangeError: Error #2006: The supplied index is out of bounds.
at flash.display::DisplayObjectContainer/removeChildAt()
at test_fla::MainTimeline/vorige()
hopelijk kan iemand mij helpen, ik loop echt vast.
vBulletin® v3.8.1, Copyright ©2000-2012, Jelsoft Enterprises Ltd.