Avatar billede arnums Nybegynder
04. marts 2008 - 10:48 Der er 8 kommentarer

Keypress Space remove movieclip?

På root har jeg Mc1 hvor Mc2 ligger inde i, jeg vil gerne have Mc2 til at lukke/remove ved tryk på Space bar.

Nogen der lige hurtigt har en kode, eller et link til tutorial?
Avatar billede maqhem Nybegynder
04. marts 2008 - 11:54 #1
stage.addEventListener(KeyboardEvent.KEY_DOWN, Space);

function Space(E:KeyboardEvent):void {
    if(E.keyCode == 32) {
        Mc1.removeChild(Mc1.Mc2);
    }
}
Avatar billede arnums Nybegynder
11. marts 2008 - 10:54 #2
cool, tak!
Selve keypress delen fungerer fint, men selve removeChild virker ikke.

svar...?
Avatar billede maqhem Nybegynder
11. marts 2008 - 11:05 #3
Svar.
Avatar billede maqhem Nybegynder
11. marts 2008 - 11:09 #4
Jeg forstår ikke, at removeChild ikke fungerer. Det gør det hos mig, når Mc1 og Mc2 er instance-navne.
Avatar billede Slettet bruger
14. marts 2008 - 23:57 #5
Jeg har aldrig fået lært AS3 og har ingen dybere indsigt i koden - men prøv følgende:
Mc1.removeChild(Mc2);
eller
removeChild(Mc1.Mc2);

Bare gæt!
Avatar billede arnums Nybegynder
17. marts 2008 - 13:54 #6
Ahhh... måske er det min fejl

Jeg arbejder i AS2.

...jeg har ikke lige prøvet hf2ke's forslag.
Avatar billede maqhem Nybegynder
17. marts 2008 - 14:29 #7
hf2ke's forslag virker ikke, det kan jeg fortælle allerede nu. Den første vil forsøge at fjerne Mc2 fra Mc1, men Mc2 kan ikke tilgås fra roden, og derfor findes denne ikke. Og den anden forsøger at fjerne Mc2 fra roden, men det kan den ikke, selvom Mc1.Mc2 rent faktisk findes, og det er fordi, den ikke findes i roden.

Din løsning er:

var Listener:Object = new Object();
Key.addListener(Listener);

Listener.onKeyDown = function() {
    if(Key.getCode() == 32) {
        // Her fjerner vi movieclippet
    }
}

Desværre har Flash en mærkelig bug/særhed, at movieclips med negative depths ikke kan fjernes med removeMovieClip, så hvis dit movieclip er tegnes direkte på din scene og ikke placeret der med actionscriptet (vel at mærke med en positiv depth), skal du først ændre denne til positiv (eller nul). Dette her finder du i hjælpen:

"removeMovieClip (MovieClip.removeMovieClip method)
public removeMovieClip() : Void

Removes a movie clip instance created with duplicateMovieClip(), MovieClip.duplicateMovieClip(), MovieClip.createEmptyMovieClip(), or MovieClip.attachMovie().

This method does not remove a movie clip assigned to a negative depth value. Movie clips created in the authoring tool are assigned negative depth values by default. To remove a movie clip that is assigned to a negative depth value, first use the MovieClip.swapDepths() method to move the movie clip to a positive depth value. (...)"

Så din kode skal være som følger:

var Listener:Object = new Object();
Key.addListener(Listener);

Listener.onKeyDown = function() {
    if(Key.getCode() == 32) {
        Mc1.Mc2.swapDepths(Mc1.getNextHighestDepth());
        Mc1.Mc2.removeMovieClip();
    }
}

Men hvis du bruger version 2-komponenter, må du ikke bruge swapDepths. Så kan getNextHighestDepth() nogen gange returnere 1048676, hvilket er lige præcist én mere, end det er tilladt med depths. Så pas på med det!
I sådanne tilfælde skal du bruge klassen DepthManager, og dette er pludseligt en helt anden snak.
Avatar billede Slettet bruger
17. marts 2008 - 15:28 #8
Ja, hvis det er AS2, er det jo lidt en anden sag :)
Lyt til Maqhem!
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

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