Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Allanon

Frischling

  • »Allanon« ist der Autor dieses Themas

Beiträge: 16

Wohnort: Kreuzau / NRW

Beruf: Schüler

  • Private Nachricht senden

1

24.05.2004, 20:27

[DX 9 & C++] 2 Tasten gleichzeitig gedrückt

Wie erkenne ich, ob zwei Tasten gleichzeitig gedrückt und welche das sind?

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

2

24.05.2004, 20:32

Das brauchst du nicht....du kannst den aktuellen Stand fragen, ob c gedrückt wurde oder ob a gedrückt wurde..... dabei können beide gleichzeitig gedrückt worden sein; dies so als Beispiel.

Allanon

Frischling

  • »Allanon« ist der Autor dieses Themas

Beiträge: 16

Wohnort: Kreuzau / NRW

Beruf: Schüler

  • Private Nachricht senden

3

24.05.2004, 21:58

Zitat von »"Nox"«

Das brauchst du nicht....du kannst den aktuellen Stand fragen, ob c gedrückt wurde oder ob a gedrückt wurde..... dabei können beide gleichzeitig gedrückt worden sein; dies so als Beispiel.


Ja, das war mir schon klar. ;)

Vielleicht war meine Frage nicht klar genug gestellt. Ich wollte wissen, wie ich erkennen kann, ob zum Beispiel die SHIFT- und die A-Taste gleichzeitig gedrückt sind, um ein großes A einzugeben.

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

4

24.05.2004, 22:01

Tja da musst man sich was einfallen lassen ;)
Also ich hätte es sogemacht das ein if abfragt ab shift gedrückt wird, wenn ja wird ein switch-Befehl mit nur großen Buchstaben ausgeführt.....

5

24.05.2004, 23:42

afaik gibt es auch keinen Unterschied zwischen der Taste Shift und der Taste A. Sind doch alles nur Tasten.

Und sie werden alle in ein und dem selben Array gespeichert das man abfragen kann.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Allanon

Frischling

  • »Allanon« ist der Autor dieses Themas

Beiträge: 16

Wohnort: Kreuzau / NRW

Beruf: Schüler

  • Private Nachricht senden

6

25.05.2004, 14:25

Zitat von »"DragonMaster"«

afaik gibt es auch keinen Unterschied zwischen der Taste Shift und der Taste A. Sind doch alles nur Tasten.

Und sie werden alle in ein und dem selben Array gespeichert das man abfragen kann.


Ja, die Tasten sind bei mir auch alle in einem Array abgelegt. Also frage ich dann einfach zuerst ab, ob die SHIFT-Taste gedrückt wurde und dann kann ich ja sehen, ob Großbuchstaben oder Kleinbuchstaben eingegeben werden. Werde das sogleich mal ausprobieren.

7

25.05.2004, 15:15

Hier mal ein ungetestetes Beispiel:

Quellcode

1
2
3
4
5
6
7
8
char Keys[256];

//...

if((Keys[DIK_LSHIFT] & 0x80) && ((Keys[DIK_A] & 0x80)))
{
    //...
}

Allanon

Frischling

  • »Allanon« ist der Autor dieses Themas

Beiträge: 16

Wohnort: Kreuzau / NRW

Beruf: Schüler

  • Private Nachricht senden

8

25.05.2004, 18:20

Zitat von »"cbee"«

Hier mal ein ungetestetes Beispiel:


Dein Beispiel ist aber nicht sehr effektiv, da du die Zeile

Zitat

Quellcode

1
if((Keys[DIK_LSHIFT] & 0x80) && ((Keys[DIK_A] & 0x80))) 
ziemlich oft eingeben musst. ;)

Also ich habe es jetzt so für meine Textbox gemacht:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
bool lettersize;

    if ( active == true )
        {
            switch ( KeyDown ( false ) )    
            {
                //Textbox deaktiveren, wenn RETURN gedrückt
                case DIK_RETURN:
                    deactivate();
                    return;
                        
                //letztes Zeichen löschen, wenn BACKSPACE gedrückt
                case DIK_BACK:
                    dellast();
                    return;
                                    
                case DIK_RSHIFT:
                    lettersize = true;
                    break;
                                                                            
                default:
                    lettersize = false;
                    break;
            };
            
            Sleep ( 1 );
            keybuf = KeyDown ( true );

            if ( keybuf != NULL )
            {
                if ( lettersize == true )
                {
                    strcat ( txt, diArray[ keybuf + 60 ] );                 
                }
                else if ( lettersize == false )
                {
                    strcat ( txt, diArray[ keybuf ] );
                };
                
                Sleep ( 100 );
                keybuf = NULL;
                
            };
        };


Aber das ist leider nicht sehr erfolgreich, da bei mir trotzdem keine Großbuchstaben auf dem Bildschirm erscheinen.

Anonymous

unregistriert

9

25.05.2004, 18:44

Zitat von »"Allanon"«

Aber das ist leider nicht sehr erfolgreich, da bei mir trotzdem keine Großbuchstaben auf dem Bildschirm erscheinen.


was macht denn die Funktion KeyDown genau ?
in der DirectX SDk konnte ich da nichts finden....

also poste mal den Quellcode....

10

25.05.2004, 18:54

Mich würde auch mal interessieren, was die Funktion KeyDown macht!

Ich könnte mir vorstellen, dass der Fehler durch das zweimalige Aufrufen der Funktion KeyDown zustande kommt.

Werbeanzeige