Avatar billede rookieboy Nybegynder
20. juni 2007 - 18:49 Der er 11 kommentarer og
1 løsning

Problemer med scope

Jeg er igang med at lave et Danmarkskort som et splittet på i 5 mindre dele. Når man fører musen over en bestemt landsdel, så sker der er farveskift på movieclippet.

Jeg har følgende kode som virker - bortset fra at de funktioner jeg har oprettet, tweener ALLE movieclips på min stage, og altså ikke kun det movieclip som jeg sender som argument til funktionen.

Kan en hvis Hr. Morten Barklund, forklare mig lidt om scope her..?

------------------------------------------------------------------

#include "mc_tween2.as"

this.københavn_mc.onRollOver = function(){
TurnOn(this)
}

københavn_mc.onRollOut = function(){
TurnOff(this)
}

var base:MovieClip = this
function TurnOn(clip:MovieClip):Void{
    base[clip].colorTo(0x002e54,.25,"easeOutSine");
}

function TurnOff(clip:MovieClip):Void{
    base[clip].colorTo(0x94b6ce,.5,"easeOutSine");
    }
Avatar billede maqhem Nybegynder
20. juni 2007 - 19:08 #1
this.københavn_mc.onRollOver = TurnOn;
this.københavn_mc.onRollOut = TurnOff;

function TurnOn(clip:MovieClip):Void{
    this.colorTo(0x002e54,.25,"easeOutSine");
}
function TurnOff(clip:MovieClip):Void{
    this.colorTo(0x94b6ce,.5,"easeOutSine");
}

this i dine events refererer direkte til movieclippet, der blev klikket på, mens this i base refererer til destinationen, hvor koden er udført. Du får en reference this[_level0.københavn_mc], og tracer du denne (trace(this[_level0.jylland_mc]);) vil du se outputtet _level0, som er roden selv, og derfor behandles alle movieclips på samme tid. Jeg skal ikke kunne sige hvorfor this[_level0.københavn_mc] er rooten, men det er også ligemeget, for this[_level0.københavn_mc] betyder (hvis du handler i roden) _root._root.københavn_mc - og det ser grimt ud!
Hvis du meget gerne vil stille det op, som du har gjort det, så slet din base og bare kald metoden colorTo direkte på parametren clip, fordi denne er en reference til det rigtige movieclip.
Avatar billede maqhem Nybegynder
20. juni 2007 - 19:12 #2
Hvis din sammensætning der skal du, skal du kalde this's _name fra dine events, så du ikke danner en dobbeltreference, men en associativ arrayhenvisning til movieclippet:

this.københavn_mc.onRollOver = function(){
    TurnOn(this._name);
}
københavn_mc.onRollOut = function(){
    TurnOff(this._name);
}

var base:MovieClip = this;
function TurnOn(clip:String):Void{
    base[clip].colorTo(0x002e54,.25,"easeOutSine");
}
function TurnOff(clip:String):Void{
    base[clip].colorTo(0x94b6ce,.5,"easeOutSine");
}

Men dette er godt nok en klam kode.
Avatar billede rookieboy Nybegynder
21. juni 2007 - 08:30 #3
Tak for dit svar maghem. Men hvorfor er det en klam kode?
Sagen er at jeg har 6 landsdele som alle skal lave den samme tween på RollOn og RollOut. Jeg vil bare gerne undgå at lave en masse gentagne kode - derfor laver jeg det som et funktionskald.

Hvordan kunne man ellers gribe sagen an?
Avatar billede maqhem Nybegynder
21. juni 2007 - 08:38 #4
Min sidst postede kode er klam, fordi den sender navnet med som parameter, og danner en reference ud fra det, frem for bare en direkte reference, som i mit første eksempel. Jeg vil foreslå, du kører igennem et loop:

var landsdele:Array = new Array();
landsdele.push("aalborg", "esbjerg", "københavn", "århus"); //bare skriv dem alle sammen ind
for(var i:String in landsdele) {
    this[landsdele[i] + "_mc"].onRollOver = this.colorTo(0x002e54,.25,"easeOutSine");
    this[landsdele[i] + "_mc"].onRollOut = this.colorTo(0x94b6ce,.5,"easeOutSine");
}
Avatar billede rookieboy Nybegynder
27. juni 2007 - 20:57 #5
Tusinde tak for svaret Maghem - points 4 u.
Avatar billede maqhem Nybegynder
28. juni 2007 - 14:54 #6
Ja nu skriver du godt nok "points 4 u", men du har lige taget dem selv. Fy skamme dig.
Avatar billede rookieboy Nybegynder
28. juni 2007 - 15:37 #7
What?! Det må du virkelig undskylde. Hvad gjorde jeg galt?
Jeg har jo accepteret dit svar..?
Avatar billede maqhem Nybegynder
28. juni 2007 - 16:44 #8
Jeg nåede slet ikke at ligge noget svar, det gjorde du selv. Det kan du se på den blå streg ud for dit svar:

Accepteret svar:
rookieboy
Avatar billede rookieboy Nybegynder
28. juni 2007 - 17:14 #9
Ahh ups. Sorry, det var altså ikke for at snyde dig for points - synes ikke at det er særligt brugervenligt lavet..
Avatar billede maqhem Nybegynder
28. juni 2007 - 17:24 #10
Hvad nu, hvis vi havde været to, der konkurrerede om at give svar, og kun den ene eller ingen kunne svare; hvordan skulle pointene ellers deles retfærigt ud, hvis man ikke skulle lægge et svar, der skulle accepteres? Jeg synes det er en meget brugervenlig måde at gøre det på. Men pyt, jeg klarer mig :)
Avatar billede rookieboy Nybegynder
28. juni 2007 - 20:10 #11
Jeg synes ikke at det fremgår særlig tydeligt af de grafiske elementer på skærmen, hvordan man giver disse point. I hvertilfælde er det lykkes, at give point til mig selv, hvor min hensigt var at give dig point.

Det burde slet ikke være teknisk muligt at give sig selv point, på en tråd man selv har startet.

Det er denne process jeg synes er brugerfjendsk - men selve idéen med pointsystemet er fint nok :-)

Hvis flere brugere begår samme fejl i et givent brugerinterface, er det så interfacet eller brugeren den er gal med? Svaret er naturligvis interfacet, da interfacet er lavet for at assistere brugeren i at løse en given opgave - og ikke omvendt.

Der findes ikke dumme brugere - der findes kun dårligt konstruerede bruger interfaces.

Men derfor kan jeg jo sagtens have sovet i timen alligevel :-)
Avatar billede maqhem Nybegynder
28. juni 2007 - 20:23 #12
Jeg har dig intet beskyldt, så du havde ikke behøvet at stille dig op og forsvare dig, men jeg vil da gerne give dig ret i, at interfacet skal guide brugeren, og gør det ikke det, så er det i mange tilfælde interfacet, det er noget galt med. Men lige præcis hér vil jeg gerne lige forsvare eksperten.dk en smule:
Når du trykker Send sender du teksten til en database som enten kommentar eller svar - det siger sig selv. Når man svarer på et spørgsmål (enten på eksperten eller alle mulige andre steder), så er svaret enten rigtigt eller forkert, og får sine konsekvenser heraf. Hvis man svarer på spørgsmål i en quiz får man accept på korrektheden af sit svar ved et "rigtigt" eller "forkert", mens det på eksperten er "accepteret svar" eller "afvist svar". Jeg synes nu faktisk eksperten.dk har et utroligt brugervenligt interface, der er svært at tage fejl af, og det er heldigvis heller ikke sket ret mange gange. Og så hvis jeg skal bakke dig lidt op, så er det da klart, du kan tage fejl, når du på ingen måde kan acceptere mit svar som rigtigt, da jeg jo ikke har smidt noget svar, og så er det nemt at tro, man selv skal smide et svar som accept på, at brugeren har svaret rigtigt. Hvis jeg til gengæld havde smidt et svar helt i starten, og du så havde lavet et selv også og accepteret begge eller kun dit, så er vi nok ovre i den boldgade, der hedder de dumme brugere ;)
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