Avatar billede donslund Nybegynder
23. november 2001 - 07:59 Der 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.
Avatar billede donslund Nybegynder
23. november 2001 - 08:01 #1
Det forsvandt noget. Det kommer her.

----  Det virker perfekt, lige bortset fra min if else - sætning. Der sker ikke en skid hvis logoet smutter forbi.
Avatar billede donslund Nybegynder
23. november 2001 - 08:03 #2
Jeg må også kunne skrive:

else if (_y>bottombound) {
gotoandplay (10)
}

Men det virker heller ikke
Avatar billede pixelpaw Nybegynder
23. november 2001 - 08:15 #3
Bliver din if sætning altid opfyldt selvom logoet ikke rammer kurven?
Avatar billede donslund Nybegynder
23. november 2001 - 08:18 #4
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.
Avatar billede donslund Nybegynder
23. november 2001 - 08:32 #5
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.
Avatar billede donslund Nybegynder
23. november 2001 - 08:37 #6
Jeg har også prøvet at lave et felt i bunden af min film også lave else-if-sætningen om til:

else if(_root.logo, hittest(_root.vand)){
        // eller hvis logoet smutter forbi, er spillet game over
        gotoAndPlay ( \"gameover\" );
       
    }\0

Men det virker heller ikke, så kunne man forestille sig, at det er fordi den ikke kan klare mere end en if-sætning?
Avatar billede pixelpaw Nybegynder
23. november 2001 - 09:06 #7
Hedder det ikke
if (_root.logo.hittest(_root.kurven)) {
?
Prøv med det istedet.
Avatar billede donslund Nybegynder
23. november 2001 - 09:09 #8
Min første if:

if(_root.logo, hittest(_root.kurven)){

virker fint.
Avatar billede pixelpaw Nybegynder
23. november 2001 - 09:12 #9
Det er ellers forkert syntaks.
Du skal jo lige tænke på, at hvis din if sætning bliver opfyldt, kommer den aldrig videre til din else if.
Avatar billede nikolajdu Nybegynder
23. november 2001 - 09:20 #10
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.
Avatar billede pixelpaw Nybegynder
23. november 2001 - 09:25 #11
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.
Avatar billede donslund Nybegynder
23. november 2001 - 09:45 #12
Her kommer lige den kode jeg er nået frem til nu.

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.
Avatar billede donslund Nybegynder
23. november 2001 - 09:47 #13
Hvis den første if-sætning ikke opfyldes, smutter logo forbi kurven og derved burde else if - sætningen træde i kraft.
Avatar billede pixelpaw Nybegynder
23. november 2001 - 09:47 #14
Kan du ikke sende filen til paw@risedata.dk?
Så kan jeg måske se hvad der går galt.
Avatar billede lingoman Nybegynder
23. november 2001 - 09:54 #15

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

mvh geo
Avatar billede pixelpaw Nybegynder
23. november 2001 - 09:58 #16
han skriver faktisk i spørgsmålet at koden ligger på \'logo\'
Avatar billede lingoman Nybegynder
23. november 2001 - 10:03 #17
Paw>>igår hjalp jeg en bruger i 2 timer før det gik op for mig at han brugte Flash 4 :) Hellere overforsigtig end uforsigtig

Hvis koden er på \"Logo\" MC betyder gotoAndPlay(10); at der findes in frame 10 i \"logo\";
Det er nok _root den findes i, eller hva
Avatar billede pixelpaw Nybegynder
23. november 2001 - 10:04 #18
rettet fil sendt tilbage

2 timer? øv!
Avatar billede donslund Nybegynder
23. november 2001 - 10:05 #19
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?
Avatar billede pixelpaw Nybegynder
23. november 2001 - 10:10 #20
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.
Avatar billede lingoman Nybegynder
23. november 2001 - 10:13 #21
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
Avatar billede lingoman Nybegynder
23. november 2001 - 10:18 #22
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\"
Avatar billede lingoman Nybegynder
23. november 2001 - 10:21 #23
paw >> kig lige forbi http://www.eksperten.dk/spm/137478
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