Avatar billede zeroxcool Nybegynder
21. februar 2009 - 21:45 Der er 6 kommentarer og
1 løsning

Flere taster på en gang

Jeg roder med en mindre spil, hvor jeg styre et lille rumskib via WASD el. Jeg har så brug for fx at kunne trykke W og D samtidig for at få en 45 graders vinkel. Det har dog ikke lykkes mig at finde nogle eksempler på dette, og min egen viden begrænser sig til at jeg skal trykke på en knap ad gangen, hvilket gør spillet meget stift og kedeligt.

På forhånd tak!
Avatar billede arne_v Ekspert
21. februar 2009 - 21:54 #1
Du må kunne udlede det udfra KeyUp og KeyDown events.
Avatar billede zeroxcool Nybegynder
21. februar 2009 - 22:06 #2
Well det kan jeg, men kun en key af gangen.
Avatar billede arne_v Ekspert
21. februar 2009 - 22:12 #3
Hvis du ser W KeyDown, D Keydown, D KeyUp, W KeyUp så må W og D være trykket samtidigt.
Avatar billede zeroxcool Nybegynder
21. februar 2009 - 22:35 #4
KeyCode, KeyData osv holder kun den første tast jeg rammer. Og siden jeg bliver ved med fx at holde w (gå frem) nede, og så senere d (gå frem og til venstere), får jeg ingen keyup, og ingen mulighed for en ny keyevent.
Avatar billede arne_v Ekspert
21. februar 2009 - 22:59 #5
private bool w = false;
        private bool d = false;
        void MainFormKeyDown(object sender, KeyEventArgs e)
        {
            if(e.KeyCode == Keys.W) {
                w = true;
            } else if(e.KeyCode == Keys.D) {
                d = true;
            }
            if(w && d)
            {
                MessageBox.Show("Du holder W og D nede samtidigt !");
            }
        }
       
        void MainFormKeyUp(object sender, KeyEventArgs e)
        {
            if(e.KeyCode == Keys.W) {
                w = false;
            } else if(e.KeyCode == Keys.D) {
                d = false;
            }
        }
Avatar billede zeroxcool Nybegynder
21. februar 2009 - 23:56 #6
Okaay ved hjælp af din snip fik jeg det til at virke... Rigtig godt oven i købet, så add'er lige koden hvis andre skulle være interesseret.

Arne du må gerne ligge et svar.


        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {

            if (e.KeyCode == Keys.A)
            {
                a = true;
            }
            else if (e.KeyCode == Keys.D)
            {
                d = true;
            }
            else if (e.KeyCode == Keys.W)
            {
                w = true;
            }
            else if (e.KeyCode == Keys.S)
            {
                s = true;
            }
        }


        private void Form1_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.A)
            {
                a = false;
            }
            else if (e.KeyCode == Keys.D)
            {
                d = false;
            }
            else if (e.KeyCode == Keys.W)
            {
                w = false;
            }
            else if (e.KeyCode == Keys.S)
            {
                s = false;
            }
        }


        bool w = false;
        bool a = false;
        bool s = false;
        bool d = false;

        private void timer2_Tick(object sender, EventArgs e)
        {
            Graphics gfx = CreateGraphics();
            SolidBrush solidBrus = new SolidBrush(Color.Red);
            SolidBrush eraseBrus = new SolidBrush(Color.White);

            gfx.FillEllipse(eraseBrus, (int)shipx, (int)shipy, 20, 10);      // overskriv rumskibets gamle position


            // find ud af hvilken vej skibet bevæger sig, og tegn.
            if (w && !d && !a && !s)        // frem
            {
                shipy -= speed;
            }
            else if (!w && !d && !a && s)  // tilbage
            {
                shipy += speed;
            }
            else if (!w && d && !a && !s)  // højere
            {
                shipx += speed;
            }
            else if (!w && !d && a && !s)  // venstre
            {
                shipx -= speed;
            }
            else if (w && d && !a && !s)  //frem + højere, virker også med højere + frem, rækkefølgen er ligegyldig.
            {
                shipy -= speed;
                shipx += speed;
            }
            else if (w && !d && a && !s)  //frem + venstre
            {
                shipy -= speed;
                shipx -= speed;
            }
            else if (!w && d && !a && s)  // tilbage + højere
            {
                shipy += speed;
                shipx += speed;
            }
            else if (!w && !d && a && s)  // tilbage + venstre
            {
                shipy += speed;
                shipx -= speed;
            }

            gfx.FillEllipse(solidBrus, (float)shipx, (float)shipy, 20, 10);      // tegn rumskibet på den nye position

        }
Avatar billede arne_v Ekspert
22. februar 2009 - 00:01 #7
svar
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