Avatar billede fredeboss Nybegynder
30. december 2005 - 16:05 Der er 10 kommentarer og
1 løsning

eksekverings orden??

Jeg har et spørgsmål som er lidt mere uspecifikt men som berører flashprogrammer som er komplekse og eventbaseret!

Jeg tænkte over hvilken orden onEnterFrame og onRelease eksekveres i forhold til hinanden fx:

Hvis laver en onEnterFrame og laver en onRelease som denne:

test_mc.onRelease = function() {
  delete this.onEnterFrame
}

Mit forslag til hvordan koden i flash eksekveres er at flash registrerer onRelease og eksekverer onrelease-koden i næste frame hvor flash først eksekverer onEnterFrame() og derefter onRelease().
  Hvis det ikke forholder sig sådan hvad sker der så i tilfældet af at onRelease og onEnterFrame blir udført på samme tidspunkt og man sletter onEnterFrame funktionen med delete? kører onEnterFrame funktionen færdig og derefter stopper? Det sidste tilfælde skaber en del komplikationer!!
 
Hvis nogen kan afklare denne problematik bliver jeg virkelig glad :)
Avatar billede kragekjaer Praktikant
30. december 2005 - 22:17 #1
Kan du ikke bare teste det med
var pic:Boolean=true;
this.onEnterFrame=function(){
if(pic){
    trace("piv");
}else{
    trace("BRØL");
}
}
test_mc.onRelease = function() {
piv=false;
trace("hallo")
  delete this.onEnterFrame
}
Avatar billede fredeboss Nybegynder
30. december 2005 - 22:35 #2
Nej for du kan ikke afgører hvornår du skal trykke altså hvornår lige præcis koden for this.onEnterFrame udføres! Formentlig vil koden virke langt de fleste gange men det er ikke nok for hvis man bygger en side med mange events fx et spil kan det være at man rammer det ene tilfælde hvor koderne udføres på samme tid!
Avatar billede fredeboss Nybegynder
30. december 2005 - 22:38 #3
Jeg forestiller mig at events faktisk først bliver udført efter næste onEnterFrame eller at flash ikke multitasker dvs kører flere eventfunktioner på samme tidspunkt men udfører dem i rækkefølge!

Det blir lidt fishy men det er da vigtigt at vide i forhold til strukturen i ens program :)
Avatar billede mat Nybegynder
31. december 2005 - 00:05 #4
så prøv med:

this.createEmptyMovieClip("test_mc", 1);
piv = true;
this.onEnterFrame=function(){
if(piv){
    trace("piv");
}else{
    trace("BRØL");
}
}
test_mc.onRelease = function() {
piv = false;
trace("hallo");
delete _root.onEnterFrame;
}
test_mc.onRelease();

Flash er såvidt jeg ved enkelttrådet, så den laver ikke ting "på samme tid". Derudover er events sikkert prioriterede eller ligger i en eventkø? Under alle omstændigheder er jeg ikke sikker på at du behøver dig bekymre dig synderligt om det?

mvh mat
Avatar billede fredeboss Nybegynder
31. december 2005 - 01:40 #5
Hvis flash er enkelt trådet er alt fint! men er der nogen steder der står det? eller nogen måde man kan finde ud af det på?

hmm det kan man vel ved at lave to onEnterFrames og der tæller til 10 med trace og hvis outputtet er kontinuert er flash enkelttrådet!

men er der ikke noget sted hvor der står hvordan det forholder sig sådan helt sikkert uden måske og gisninger?
Avatar billede mat Nybegynder
31. december 2005 - 10:58 #6
Det eneste jeg lige kunne finde på det er denne tråd; http://chattyfig.figleaf.com/pipermail/flashcoders/2005-December/155229.html

Ellers så spørg Barklund ovre på actionscript.dk (eller vent på at han kigger forbi her), han plejer at vide sådan noget ;)

mvh mat
Avatar billede barklund Nybegynder
02. januar 2006 - 10:17 #7
Flash er enkelttrådet - altid. Der _kan_ ikke gøre to scripts samtidig. Dette kan du for eksempel forsikre dig ved at lave en onEnterFrame med:

trace("a");
trace("b");

Og en knap med:

trace("knap");

"knap" vil _aldrig_ komme imellem "a" og "b" - uanset hvor godt du forsøger at ramme den :)

Dog, vil du være sikker på, at ting kører som de skal, så brug en lidt smartere central event-manager, som kan distribuere forskellige events ud hist og her. Og hvis du for eksempel har noget som ovenstående, så byg det op med en klasse til dette, som har en stop-funktion. Det med, at man fjerner en onEnterFrame et eller andet mærkeligt sted henne kan være ret svært at overskue i længden. Brug AS2 og byg det op i korrekte, logiske klasser :)

:)

--
Morten Barklund
Avatar billede barklund Nybegynder
02. januar 2006 - 10:18 #8
(og jeg holdt lige lidt ferie, sorry :))
Avatar billede fredeboss Nybegynder
02. januar 2006 - 16:54 #9
Tak for svaret :) kan du ikke oprette det som svar så kan jeg give point?
Avatar billede barklund Nybegynder
02. januar 2006 - 17:05 #10
Cool nok :)
Avatar billede barklund Nybegynder
02. januar 2006 - 18:34 #11
Tark for points i hvert fald :)
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