20. juni 2007 - 18:49Der 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..?
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
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.
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:
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"); }
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.
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"); }
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 :)
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 :-)
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 ;)
Synes godt om
Ny brugerNybegynder
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.