PDA

Volledige versie bekijken : functions hebben laadtijd?


theFlashWizard
%Europe/Berlin %967 %2005, 23:13
ey mensjes
Kheb n nogal raar probleem.. teminste.. ik vind het raar..

Ik wil na het laden van info wat dingen in bericht_mc's onder mekaar zetten in n zelf gemaakte scrollpane..
elk bericht_mc bevat me zelf gemaakte scrollbar..
maar die moet ik nadat ik het textfield heb gevult "prepare"en zodat hij het nakijkt en gaat functionere..
het vreemde alleen is dat ik dit niet direct kan doen :S

dit is het script:

lv = new LoadVars();
lv.onLoad = function(success) {
output_txt.text = ""

A = _global.A

//trace("A: "+_global.A)

delete prevY
for(i=0;i<A;i++){
bericht_mc = scrollpane.holder.attachMovie("bericht_mc","bericht_mc"+i,i)

bericht_mc._y = prevY+T
prevY = bericht_mc._y+H

bericht_mc.name_txt.text = this["naam"+i]
bericht_mc.date_txt.text = this["tijd"+i]

bericht_mc.scroller.holder.content_txt.mouseWheelE nabled = false
bericht_mc.scroller.holder.content_txt.html = true
bericht_mc.scroller.holder.content_txt.htmlText = this["berichten"+i]
bericht_mc.scroller.holder.content_txt.autoSize = "left"
//bericht_mc.scroller.track.prepare()
}
//init()
initI = setInterval(init,10)

scrollpane.holder.TH = prevY
scrollpane.prepare()
}
function init(){
clearInterval(initI)
for(i=0;i<A;i++){
bericht_mc = scrollpane.holder["bericht_mc"+i]
bericht_mc.scroller.track.prepare()
}
}

het gaat er dus om dat de init functie niet direct aangesproken kan worden, maar pas werkt na een vertraging van 10 miniseconden.. :S
terwijl als ik er een trace bij zet hij de mc waar het script in zit wel al vind..

dus init() werkt niet, maar het werkt wel na een vertraging:
initI = setInterval(init,10)
kan iemand mij uitlegge waarom dit zo is? :S
want het lijkt erop of ik ff moet wachten totdat flash het script van me scrollbar heeft geladen :S

alvast bedankt!

SaphuA
%Europe/Berlin %970 %2005, 23:17
Dat komt volgens mij omdat de functie wordt aangeroepen waneer de externe data geladen is, en dit gaat niet zo rap. Verder snap ik het probleem van 10 miliseconden niet helemaal eigenlijk |)

theFlashWizard
%Europe/Berlin %971 %2005, 23:19
de init() zit al in een onLoad.. de externe data zou al geladen moeten zijn..
het rare is dat hij toch die functie in die geattachte mc niet vind..
maar flash lijkt hem wel te vinden als ik hem dmv een interval 10 milisec. laat wachten..

theFlashWizard
%Europe/Berlin %010 %2005, 00:15
Kheb ff een kleiner voorbeeldje gemaakt..

1 script op de hoofdtijdlijn:
//test_mc.testMe() //<-werkt niet
initI = setInterval(init,10) //<-werkt wel
function init() {
clearInterval(initI)
test_mc.testMe()
}


1 mc:
test_mc

met daarin op de tijdlijn het script:
function testMe(){
trace("testMe")
}

maar de trace wordt dus alleen aangesproken wanneer je n paar miliseconden wacht :S:S
kan iemand mij uitleggen waarom? en hoe ik dit mischien op n nette manier kan oplossen?

Dauntless
%Europe/Berlin %322 %2005, 07:44
blaat();
function blaat()
{
trace("blaaaat");
}
Dit werkt toch gewoon...

't Lijkt mij eerder dat die movieclip enkele milliseconden nodig heeft om doorlopen te worden, zodat alle functies geindexeert kunnen worden...

TheDutch
%Europe/Berlin %351 %2005, 08:26
Wanneer je een MovieClip attached via attachMovie() zit er een laadtijd in, vandaar dat op het moment dat jij de functie binnen deze MovieClip aanroept hij nog niet bestaat en dus niet werkt. Zorg er dus voor dat je zeker weet dat de MovieClip volledig op de stage geladen is. Dit kunt je doen met getBytesLoaded() en getBytesTotal() net zoals wanneer je een externe SWF inlaadt :).

theFlashWizard
%Europe/Berlin %374 %2005, 08:58
hmm vreemd.. Kwist echt niet dat dat nodig was.. maar thnx voor de info..
raar dat als dat zo is attachMovie niet iets van een onLoad heeft en loadVars en LoadClip wel..

TheDutch
%Europe/Berlin %410 %2005, 09:51
Dit staat trouwens ook in de LiveDocs van Macromedia onder attachMovie ;).

Maar even voor verduidelijking, attachMovie komt net als loadMovie nog uit de "oudetijd". Er is voor attachMovie (nog) niet zoiets als de MovieClipLoader.

A3D
%Europe/Berlin %419 %2005, 10:04
Is niet alleen zo bij attachMovie...maar Flash laad / initialiseerd altijd van buiten naar binnen...waarbij custom methoden en properties (in tegenstelling tot standaard methoden en properties) niet direct aanspreekbaar zijn (http://www.a3d.nl/index.php/?p=194)...

theFlashWizard
%Europe/Berlin %438 %2005, 10:31
thnx voor alle info :)
sorry kijk meestal gewoon in me eige help.. als ik tegenwoordig uberhaupt nog kijk.. :$
en A3D Kzal vanaaf rustig je artikel lezen :)

theFlashWizard
%Europe/Berlin %839 %2005, 20:08
ey A3D,
Kan je mischien iets meer vertellen over dat script dat je daar gebruikt:

private function onLoad(){
onEnterFrame = iniLater;
}
private function iniLater(){
onEnterFrame = null;
mijnClip.mijnProp="iets";
mijnClip.mijnMethode();
}

of zou je het heel mischien kunnen toevoegen aan dat simpele voorbeeldje zodat die werkt?
alvast bedankt!

TheDutch
%Europe/Berlin %885 %2005, 21:15
Ik heb even snel een eigen attachMovieClip() prototype geschreven die wel de onLoad functionaliteit ter beschikking heeft:

/*
MovieClip.attachMovieClip() prototype functie die de huidige
MovieClip.attachMovie() functie kan vervangen. Een nieuwe feature is de mogelijkheid
tot een "callback" naar de MovieClip.onLoad() functie.
*/
MovieClip.prototype.attachMovieClip = function(idName,newName,depth,initObject){
this.attachMovie(idName,newName,depth,initObject);
if(typeof(this[newName]) == "movieclip"){
this[newName].onEnterFrame = function(){
if(this.getBytesLoaded() > 4 && (this.getBytesLoaded() >= this.getBytesTotal())){
this.onLoad();
delete this.onEnterFrame;
}
}
}
}

// Voorbeeld gebruik attachMovieClip().
this.attachMovieClip("test","test_mc",1,{_x:10,_y:20});

// onLoad() functie
test_mc.onLoad = function(){
trace("done!")
}

Veel plezier ermee! :).