23. november 2001 - 07:59Der er
22 kommentarer og 1 løsning
Else if ...
Jeg har en flash fil, hvor man skal fange et logo med en kurv. Men hvis logoet ryger forbi kurven (Altså hvis man ikke griber den) Er spillet game over. Det er lavet med følgende actionscript på logoet:
onClipEvent (load) { VelY = 1; function startMe () { _x = random(550); // VilkÂrlig vandret position _y = 0; // Den lodrette position er konstant y=0 velY = VelY+2; // Den lodrette hastighed stiger med 2 hvergang der kommer et nyt logo } bottomBound = 400; // Den nedre grÊnse startMe(); // Vi kalder ovenstÂende funktion til at starte med } onClipEvent (enterFrame) { _y += velY; // Lodret ned med den givne hastighed
if(_root.logo, hittest(_root.kurven)){ // Hvis kurven rammer logoet skal der komme en ny startMe(); // Der kommer et nyt logo ned } else if(_y>_root.kurven._y){ // eller hvis logoet smutter forbi, er spillet game over gotoAndPlay (10); // Funktionen vÊlger en vilkÂrlig hastighed og vandret position, mens den lodrette er konstant y=0 } }\0
Det virker, lige bortset fra min if else - sætning. Der sker ikke en skid hvis logoet smutter forbi.
Med version 7 af TeamShare tager Lector næste skridt og bygger en platform for AI-agenter, der i højere grad kan følge medarbejderen gennem hele arbejdsprocessen.
I den første if-sætning finder jo ud af, om logo og kurven rører hinanden. I min else if-sætning, skal jeg finde ud af, om logoets y-værdi er højere end kurvens.
hele min if-sætning bliver opfyldt, også selvom den ikke rammer kurven, for så opfylder den jo else if-sætningen ved at få en større y-værdi end kurven.
For at det skulle kunne virke ordentligt er du nødt til at gøre tingene ordentligt.
_y og _x er absolut intet uden at fortælle hvilket objekt det hører til. Det skal være this._x og this._y - Og alligevel ved jeg godt mabn kan komme langt uden at gøre det \"rigtigt\" men i længden vil det blive et problem.
nikolaj > uden \'this\' hendviser _x/_y og alle de andre altid til det MC de ligger på/i. Og her ligger koden på selve logoet, så det er nok ikke der problemet ligger.
onClipEvent (load) { VelY = 1; function startMe () { _x = random(450) + 50; // VilkÂrlig vandret position _y = 0; // Den lodrette position er konstant y=0 velY = VelY+2; // Den lodrette hastighed stiger med 2 hvergang der kommer et nyt logo } bottomBound = 400; // Den nedre grÊnse startMe(); // Vi kalder ovenstÂende funktion til at starte med }
onClipEvent (enterFrame) { _y += velY; // Lodret ned med den givne hastighed
if(_root.logo, hittest(_root.kurvenbund)){ // Hvis kurven rammer logoet skal der komme en ny startMe(); // Der kommer et nyt logo ned } else if(_root.logo, hittest(_root.bund)){ // eller hvis logoet smutter forbi, er spillet game over gotoAndPlay ( \"gameover\" );
} }\0
Det erneste der ikke virker nu, er min else if -sætning.
For at have alt afklaret må vi lige vide om actionen sidder på MC \"logo\" eller MC \"kurv\"! Hvis actionen er sat på MC \"logo\"... OG MC \"kurv\" instancet er navngivet som \"kurven\" (tjek det lige)
onClipEvent (load) { VelY = 1; function startMe () { _x = random(550); // VilkÂrlig vandret position _y = 0; // Den lodrette position er konstant y=0 velY = VelY+2; // Den lodrette hastighed stiger med 2 hvergang der kommer et nyt logo } bottomBound = 400; // Den nedre grÊnse startMe(); // Vi kalder ovenstÂende funktion til at starte med } onClipEvent (enterFrame) { _y += velY; // Lodret ned med den givne hastighed
if(this.hitTest(_root.kurven)){ // Hvis kurven rammer logoet skal der komme en ny trace \" jeg fik den !\"); startMe(); // Der kommer et nyt logo ned }
if(_y>_root.kurven._y){ // eller hvis logoet smutter forbi, er spillet game over trace(\"en smutter, Game over\"); _root.gotoAndPlay (10); //gå til frame 10 i hovedfilmen // Funktionen vÊlger en vilkÂrlig hastighed og vandret position, mens den lodrette er konstant y=0 } }
//forskellen er >> _root.gotoAndPlay (10); //gå til frame 10 i hovedfilmen ellers prøver den jo at finde en frame 10 helt forgæves i \"Logo\" MC
Ikke desto mindre, så er det lingomans _root. foran gotoandplay-koden der var problemet, så tak fordi i andre tog jer tid. Lingoman får point. Men hvad laver det der trace i koden?
Det er også det jeg har rettet i den fil jeg sendte tilbage (_root) Forklaring på hvorfor du skal bruge _root:
Din kode ligger på dit logo, hvad gør at gotoAndPlay(10); vil prøve at gå til frame 10 INDEN I dit logo movieclip. _root hendviser til til main timeline, der hvor alting udspringer fra, og da der er her din \"gameover\" frame ligger så skal du bruge det. Alle MovieClips er bygget op i et hiraki.
Det fortæller dig i output vinduet hvad der sker, så vi kan pejle os ind på problemet. Bruger det altid i min nye kode for at sikre mig at alt virker efter hensigten, og hvis den ikke gør det, kan trace() OUTPUT fotælle mig hvor den går galt.
Når alt kører vel kan du bare slette alle trace() kommandoer. De hjælper kun dig i at tjekke hvad der sker. Ikke andet
Det var i øvrigt slet ikke min hensigt at \"hugge\" point for næsen af jer. Jeg kunne bare ikke modstå lysten til at fejlfinde :) opretter lige \"Point til pixelpaw\"
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.