Avatar billede powerduck Nybegynder
04. maj 2005 - 16:56 Der er 11 kommentarer og
3 løsninger

callback venter ikke på at tween er fædig

Jeg har to tweens i en funktion (movebackin) den ene flytter mit MC ud og det næst flytter det ind igen. Men imellem de to vil jeg gerne sikre at mit MC ligger øverst.

Men ligemeget hvad jeg gør så swapper den depth inden den er færdig med første tween. Er der nogen der har en god forklaring? Callback burde da først eksekveres efter tweenen er afsluttet og ikke bare igangsat??

function swapme (who) {
    who.swapDepths(_root.getNextHighestDepth());
}
function moveBackin(mc) {
    mc.slideTo(who._x, 550, 1, 'easeOutQuad', 0, swapme(mc));
    mc.slideTo(who._x, 120, 1, 'easeOutQuad', 2);
}
Avatar billede barklund Nybegynder
04. maj 2005 - 16:59 #1
Hvis du skriver:

swapme(mc)

Så kalder du jo funktionen? Så vil flash jo kalde funktionen og bruge returværdien som argument til slideTo - og det er du jo ikke interesseret i.

I stedet skal du overføre en funktion per reference, som opererer på et movieclippet angivet via aktiverende scope. Lyder lidt komplekst, men det er faktisk ret simpelt:

function swapme () {
    this.swapDepths(this._parent.getNextHighestDepth());
}
function moveBackin(mc) {
    mc.slideTo(who._x, 550, 1, 'easeOutQuad', 0, swapme);
    mc.slideTo(who._x, 120, 1, 'easeOutQuad', 2);
}

You see? :)

--
Morten Barklund
Avatar billede powerduck Nybegynder
04. maj 2005 - 17:28 #2
Jeg får en syntax error på
this.swapDepths(this._parent.getNextHighestDepth());

vil du placere denne kode på mc? jeg har alle mine functioner liggernede i frame 1 i den 'yderste' timeline?
Avatar billede powerduck Nybegynder
04. maj 2005 - 18:21 #3
vel gør jeg ej -det er mig der ikke kan copy-paste! ;-(
Avatar billede powerduck Nybegynder
04. maj 2005 - 18:30 #4
nå, men den swapper ikke. Jeg har prøvet at trace værdierne og så vidt jeg kan se kan den ikke hitte ud at this._parent.getNextHighestDepth() - den kommer ud som undefined uanset om jeg siger
trace (this._parent.getNextHighestDepth());
eller trace (eval(this._parent.getNextHighestDepth());

Jeg har også forsøgt med _root.getNextHighestDepth() men uden held, nogen bud på hvad jeg gør galt?

tak for hjælpen.
Avatar billede rohaje Nybegynder
04. maj 2005 - 22:18 #5
getNextHighestDepth() er en "mx 2004" tingest, hvis du arbejder i "mx" må du selv holde styr på dine depths
Avatar billede barklund Nybegynder
05. maj 2005 - 16:08 #6
Hvilket højst sandsynligt er problemet - altså hvad rohaje siger.
Avatar billede paal_dk Nybegynder
05. maj 2005 - 19:12 #7
Hej, brug en delegate til at styre scope på funktionen, så skal det nok fungere. Det er desuden nemmere at forstå for andre udviklere hvad der sker. Jeg kan anbefale altid at gøre det på callbacks fra tredieparts objekter/metoder, som ikke altid bekymrer sig om hvor scope er når de er færdige:

import mx.utils.Delegate;
function swapme() {
  this.swapDepths( this._parent.getNextHighestDepth() );
}
mc.slideTo(who._x, 550, 1, 'easeOutQuad', 0, Delegate.create( mc, swapme ) );
mc.slideTo(who._x, 120, 1, 'easeOutQuad', 2);

Mvh,
Pål Østerud
Avatar billede powerduck Nybegynder
08. maj 2005 - 17:39 #8
paal_dk - det virker - lægger du ikke et svar. (så kan du og barklund dele da I tilsammen fik det til at spille ;-) Tak for hjælpen.

Ved du hvor kan jeg læse mere om delegate?
Avatar billede barklund Nybegynder
08. maj 2005 - 18:36 #9
Finfin...

Dog ville jeg forvente, at enhver fornuftigt movieclip prototype metode scopede sin callback efter movieclippet. Det andet er noget hat!

--
Morten Barklund
Avatar billede paal_dk Nybegynder
09. maj 2005 - 13:56 #10
Her. Delegate.create( <clip>, <function>) returnerer en wrapper funktion omkring din <function> som gør at den bliver kaldt med <clip> som scope.

Har ikke noget konkret link. Google på "actionscript Delegate", eller kig på sourcen for mx.utils.Delegate (F3 "Delegate.as" hvis du ikke ved hvor MM's klassebibliotek ligger) - den fylder ikke noget.

Pål

PS: Selv i Macromedias egne callbacks er der ikke taget højde for at bevare scope til kaldende AS2 klasser (fremfor movieclips). Så brug delegate på xml.onload, og LoadVars hvis du bruger dem i en wrapper klasse.
Avatar billede barklund Nybegynder
09. maj 2005 - 15:09 #11
Man kan ikke lave rigtigt scope til callbacks til xml.onload med videre - hvis man ikke har en reference til det kaldende scope.

Og første argument til Delegate.create kan selvfølgelig være et vilkårligt objekt - og ikke kun movieclips :)

--
Morten Barklund
Avatar billede powerduck Nybegynder
09. maj 2005 - 22:00 #12
Tak for det. jeg er blevet væsentligt klogere.
Avatar billede barklund Nybegynder
09. maj 2005 - 22:04 #13
Finfin, tark for points :)
Avatar billede paal_dk Nybegynder
09. maj 2005 - 22:39 #14
velbekomme og tak :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester