Avatar billede albani Nybegynder
10. oktober 2005 - 12:59 Der er 31 kommentarer og
2 løsninger

kun ét mc af gangen

Hej

jeg søger en løsning til et problem med dublicate MC.
Jeg har et "laser skud" som MC som bliver dublicated ved et keypress på control. Men dette kan jeg gøre om og om igen hvorefter den enten genstarter skudet eller tilføjer et nyt, problemet i det ligger at der kune må være ét skud af gangen, dvs. hvis skudet "er på vej" skal et hit på control ikke gøre noget før skudet er væk. Det skal altså ikke genstartes eller affyre et nyt før det gamle skud er væk.

hvordan gør jeg dette ? 200 point til ideen der sender mig den rette vej. Behøver ikke at være ren actionscript løsning, måske bare en ide til hvordan...
Avatar billede albani Nybegynder
10. oktober 2005 - 13:02 #1
skal lige siges jeg har prøvet rigtigt mange ting, så kom bare med nogle langt ude bud, der måske kan sende mig i den rigtige retning
Avatar billede kalleballe Nybegynder
10. oktober 2005 - 13:54 #2
Du kan jo prøve at lave dine skud med tween klassen og så sætte et flag der først bliver fjernet når dit skud har nået sit mål.

altså onPress laver du et tjek på dit flag:

If flag!=1 så gør et eller andet ellers så sker der ikke noget

og der hvor du starter dit skud sætter du så flag=1

så kan du evt. bruge tween.onMotionFinished = function(){

mit skud er slut derfor er mit flag nu 0 igen...

}


På den måde kan man kun skyde 1 gang, - når skuddet er færdigt kan man skyde igen.

Hvis du ikke bruger tween klassen skal du bare måle på enten hitTest(et eller andet som kuglen skal ramme) eller også nogle grænse x y værdier.


vh

KalleBalle
Avatar billede kalleballe Nybegynder
10. oktober 2005 - 13:55 #3
Humlen er altså, - rejs et flag når din kugle er aktiv, - sænk det igen når den er inaktiv.
Avatar billede albani Nybegynder
10. oktober 2005 - 14:02 #4
der er ingen tweens i mit "laser skud" MC....

Har forsøgt at sætte en skud "begrænser" ved at lave en global varialbel som så skal redceres til "1" når skudet fjernes, se nederst, men det virker ikke :-(

Dette script ligger på manden:
Her er koden hvor jeg starter skudet:

    onClipEvent(keyDown){
        if(Key.isDown(Key.CONTROL) && _global.SpillerEtLaserAntal == 1){
            _global.SpillerEtLaserAntal++;
            _root.SpillerEtLaser.duplicateMovieClip("SpillerEtLaser");
            _root.SpillerEtLaser._visible=true;
    }
}

Dette script ligger på laseren:

onClipEvent(enterFrame){
        this._y-=SpillerEtLaserHastighed;
        if(this._y<-30){ //Øverste grænseværdi
            _global.SpillerEtLaserAntal = 1;
            this.removeMovieClip();
    }
}
Avatar billede kalleballe Nybegynder
10. oktober 2005 - 14:11 #5
Hej, - jeg kan slet ikke anbefale at du lægger kode DIREKTE på dine mcs, - det kan gøre det hele meget uoverskueligt.

Og du skal nok heller ikke bruge Store begyndelses bogstaver som variabel navne så ligner det bare klasser..

Prøv at trace din SpillerEtLaserAntal så du kan se hvad der sker...
trace(" mit flag = "+SpillerEtLaserAntal);

_global.SpillerEtLaserAntal++;

kan du lige så godt sætte til:

_global.SpillerEtLaserAntal = 2;



Det ser også ud til at du aldrig sætter

_global.SpillerEtLaserAntal = 1 og så kommer den jo ikke i gang...
Avatar billede albani Nybegynder
10. oktober 2005 - 14:16 #6
_global.SpillerEtLaserAntal definerer jeg i et andet layer, fandt det blot overflødigt at skrive det, en fejl fra mig :-)

om den sættes til 2 eller ++ er jo lige gyldigt, ender med det samme anyway.

_global.SpillerEtLaserAntal sættes hele tiden til 1 så jeg kan genstarte skudet hele tiden, den flytter det blot til den nye affyrings position....
Avatar billede kalleballe Nybegynder
10. oktober 2005 - 14:21 #7
men den skal vel ikke sættes til 1 hele tiden så giver

  if(Key.isDown(Key.CONTROL) && _global.SpillerEtLaserAntal == 1){

ingen mening da den _global.SpillerEtLaserAntal altid er 1, - den skal vel kun være 1 når din laser er inaktiv
Avatar billede albani Nybegynder
10. oktober 2005 - 14:24 #8
det er sat til 1 som start, og skudet kan derfor affyres....
når skudet affyres ligges der én til så den har en værdi på 2 og næste skud kan ikke affyrres....
når skudet der blev affyrret fjernes (slutter) sættes den igen til 1 og der kan affyrres et nyt skud.
MEN problemet er at jeg kan blive ved med at affyrre et nyt skud, så fjerner den dog det gamle og sætte et nyt fra den nye position.
Avatar billede kalleballe Nybegynder
10. oktober 2005 - 14:26 #9
og du har tracet dit flags værdi?
Avatar billede albani Nybegynder
10. oktober 2005 - 14:30 #10
er ikke bekendet med trace funktionen
Avatar billede kalleballe Nybegynder
10. oktober 2005 - 14:33 #11
skriv

tjekFlag = function(){

trace("tjek flag = "+_global.SpillerEtLaserAntal)

}

setInterval(tjekFlag, 100);

så kan du se om den har den forventede værdi
Avatar billede albani Nybegynder
10. oktober 2005 - 14:40 #12
hvis jeg ser på min _global.SpillerEtLaserAntal værdi bliver den meget høj, afhænigig af hvor lang tid jeg kører klippet og holder control nede
Avatar billede albani Nybegynder
10. oktober 2005 - 14:43 #13
har lige leget lidt med de flag, hvis jeg indsætter nogle flag i mit laser skud, hvorledes skal jeg så sætte min key.down action så den kan starte/ikke starte en ny ?
Avatar billede albani Nybegynder
10. oktober 2005 - 15:54 #14
tracen giver kun værdien 1
Avatar billede kalleballe Nybegynder
10. oktober 2005 - 15:56 #15
undskyld, - jeg har lidt travlt, - men du skriver et eller andet sted at du sætter værdien til 1 HELE TIDEN, - det skal den ikke være, - så fjern det.
Avatar billede albani Nybegynder
10. oktober 2005 - 15:56 #16
giver et 2-tal så snart jeg affyrer et skud, men ændrer det med det samme til 1
Avatar billede kalleballe Nybegynder
10. oktober 2005 - 16:02 #17
ok, - så problemet er at det bliver ændret INDEN dit skud er færdigt, så vil jeg tro at det er her problemet er:

if(this._y<-30){ //Øverste grænseværdi
            _global.SpillerEtLaserAntal = 1;
            this.removeMovieClip();
    }

prøv at tjekke om this._y<-30 ikke ALTIDE er sand...

trace("mit y = "+this._y);

altså:

onClipEvent(enterFrame){
        this._y-=SpillerEtLaserHastighed;
   
        trace("mit y = "+this._y);


        if(this._y<-30){ //Øverste grænseværdi
            _global.SpillerEtLaserAntal = 1;
            this.removeMovieClip();
    }
}

jeg har stærkt på fornemmelsen at denne værdi hurtigt bliver mindre og mindre da du jo hele tiden trækker SpillerEtLaserHastighed fra, -  og når det sker on enterframe så går det altså hurtigt!!!
Avatar billede albani Nybegynder
10. oktober 2005 - 16:03 #18
har fjernet ALLE steder hvor jeg sætter værdien, med undtagelse af:

onClipEvent(enterFrame){
        this._y-=SpillerEtLaserHastighed;
        if(this._y<-300){ //Øverste grænseværdi
            _global.SpillerEtLaserAntal = 1;
            this.removeMovieClip();
    }
}

MEN den sætter værdien til 1 hele tiden altså istedet for at vente til den når grænseværdien.... hmmmmm
Avatar billede albani Nybegynder
10. oktober 2005 - 16:08 #19
du har ret, den tæller bare nedaf for vildt også selvom første skud slet ikke er affyret ?!?? den skal selvfølgelig først starte når skudet falder, og nulstilles ved afslutning af skudet (removeMC)....

men hvordan
Avatar billede kalleballe Nybegynder
10. oktober 2005 - 16:14 #20
jeg har ikke lige tid nu desværre...
Avatar billede albani Nybegynder
10. oktober 2005 - 16:15 #21
ok, andre ?!
Avatar billede kalleballe Nybegynder
10. oktober 2005 - 19:30 #22
okay:

  onClipEvent(keyDown){
        if(Key.isDown(Key.CONTROL) && _global.SpillerEtLaserAntal == 1){
            _global.SpillerEtLaserAntal = 2;
            _root.SpillerEtLaser.duplicateMovieClip("SpillerEtLaser");
            _root.SpillerEtLaser._visible=true;
    }
}

Dette script ligger på laseren:

onClipEvent(enterFrame){
        if(_global.SpillerEtLaserAntal == 2){

        this._y-=SpillerEtLaserHastighed;

        if(this._y<-30){ //Øverste grænseværdi
            _global.SpillerEtLaserAntal = 1;
            this.removeMovieClip();
    }
}
Avatar billede kalleballe Nybegynder
10. oktober 2005 - 19:31 #23
skal lige have en ekstra } til slut altså:

    if(Key.isDown(Key.CONTROL) && _global.SpillerEtLaserAntal == 1){
            _global.SpillerEtLaserAntal = 2;
            _root.SpillerEtLaser.duplicateMovieClip("SpillerEtLaser");
            _root.SpillerEtLaser._visible=true;
    }
}

Dette script ligger på laseren:

onClipEvent(enterFrame){
        if(_global.SpillerEtLaserAntal == 2){

        this._y-=SpillerEtLaserHastighed;

        if(this._y<-30){ //Øverste grænseværdi
            _global.SpillerEtLaserAntal = 1;
            this.removeMovieClip();
    }
}

}
Avatar billede albani Nybegynder
10. oktober 2005 - 19:32 #24
prøver lige
Avatar billede kalleballe Nybegynder
10. oktober 2005 - 19:33 #25
hehe og nu glemte jeg onClipEvent på den første:

onClipEvent(keyDown){
  if(Key.isDown(Key.CONTROL) && _global.SpillerEtLaserAntal == 1){
            _global.SpillerEtLaserAntal = 2; // REJSER FLAG!!
            _root.SpillerEtLaser.duplicateMovieClip("SpillerEtLaser");
            _root.SpillerEtLaser._visible=true;
    }
}

onClipEvent(enterFrame){
// hvis flaget er rejst så....
        if(_global.SpillerEtLaserAntal == 2){

        this._y-=SpillerEtLaserHastighed;

        if(this._y<-30){ //Øverste grænseværdi
// hvis vores laser har nået sin grænse så giver vi skyde knappen lov til at virke igen
            _global.SpillerEtLaserAntal = 1;
            this.removeMovieClip();
    }
}

}
Avatar billede kalleballe Nybegynder
10. oktober 2005 - 19:33 #26
Jeg har ikke tjekket det men det burde være rigtigt.

vh

KalleBalle
Avatar billede kalleballe Nybegynder
10. oktober 2005 - 19:36 #27
p.s. og se så at få den kode væk fra diverse mc's, - brug noget i retning af:

gunMan.onPress = function(){

if (_global.SpillerEtLaserAntal == 1){
            _global.SpillerEtLaserAntal = 2; // REJSER FLAG!!
            _root.SpillerEtLaser.duplicateMovieClip("SpillerEtLaser");
            _root.SpillerEtLaser._visible=true;
    }

}

etc..





}
Avatar billede kalleballe Nybegynder
10. oktober 2005 - 19:37 #28
minus den sidste }
Avatar billede albani Nybegynder
10. oktober 2005 - 19:43 #29
hhhmmm ... jeg er ret sikker på at være tæt på løsnigen, men første gang jeg skyder afsender den 2 skud ?! den ene af de to blive hængende og forsvinder ikke ved øvre grænse, den anden forsvinder.

når jeg affyrer det næste skud står den stille og flytter sig kun én hastighed pr. "control" klik....
Avatar billede kalleballe Nybegynder
11. oktober 2005 - 00:31 #30
Kan du ikke sende mig flaen, - det vil gøre det meget lettere.

Email: bach_gislinge@hotmail.com

vh

KalleBalle
Avatar billede albani Nybegynder
11. oktober 2005 - 10:12 #31
done
Avatar billede albani Nybegynder
11. oktober 2005 - 10:33 #32
Tusind tak, ikke alene fik jeg løst problemet, nu er jeg også bekendt med trace funktionen, et godt værktøj.

taaaaaak !
Udløser sgu god karma
Avatar billede kalleballe Nybegynder
11. oktober 2005 - 14:18 #33
Godt du kunne bruge det :)

vh

KalleBalle
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