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

1

26.07.2007, 21:48

[allegro] getkeystate funktion

Sorry das ich immer eure Zeit in Anspruch nehmen muss aber das GetKeyState ist was neues für mich.... hab schon lange dran gehockt aber immernoch net verstanden...

C-/C++-Quelltext

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
const int KEY_UNCHANGED = 0;
const int KEY_PRESSED = 1;
const int KEY_RELEASED= 2;


int getKeyState(int keycode) {
    static int keyState[KEY_MAX];
    static int firstTime = 1;
    
    if (firstTime) {
        firstTime = 0;
        memset(keyState, 0, sizeof(int) * KEY_MAX);
    }
    if (key[keycode]) {
        if (keyState[keycode]) {
            return KEY_UNCHANGED;
        } else {
            keyState[keycode] = 1;
        } 
    } else {
        if (keyState[keycode]) {
            keyState[keycode] = 0;
            return KEY_RELEASED;
        } else {
            return KEY_UNCHANGED;
        }
    }
}


ich check den code da irgendwie net ich weiss netmal richtig was die funktion ganz genau bringen soll könnt ihr mir so alles wichtig davon erklären please?

bitte helft mir ein letztes mal wenn ihr mir helfen könnt.
Vielen Dank
MfG
amidamaru
Dave Matthews Band ROCKT !!!

www.davematthewsband.com

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

26.07.2007, 22:11

Mal kommentiert:

C-/C++-Quelltext

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
const int KEY_UNCHANGED = 0;
const int KEY_PRESSED = 1;
const int KEY_RELEASED= 2;


int getKeyState(int keycode) {
    static int keyState[KEY_MAX];
    static int firstTime = 1;
   
    // Wurde die Funktion das erste mal aufgerufen???

    if (firstTime) { 
        firstTime = 0; // Erstmal firstTime auf 0 das der If-Zweig nicht nochmal ausgeführt wird

        memset(keyState, 0, sizeof(int) * KEY_MAX); // Das Array keyState mit 0 Bytes überschreiben

    }
    // Ist der Eintrag mit dem Index "keycode" in "key" != 0 ?

    if (key[keycode]) { 
        // Gleiche Abfrage wie oben nur mit im Array keyState

        if (keyState[keycode]) {
            return KEY_UNCHANGED; // Aha, beide Abfragen wahr => Taste wurde anscheinend nicht geändert

        } else {
            keyState[keycode] = 1; // Eintrag auf 1 setzen um beim nächsten Aufruf feststellen zu können das die Tastenstatus sich nicht geändert hat

        }
    } else { // kay[ keycode ] == 0

        if (keyState[keycode]) { // Status prüfen, wie Oben

            keyState[keycode] = 0; // Status war 1, also erstmal auf 0 setzen

            return KEY_RELEASED; // Wenn der Status 1 war wurde die Taste wohl losgelassen

        } else {
            return KEY_UNCHANGED; // Wenn der Status 0 war ist wohl nichts spannendes passiert => Unchanged als Rückgabewert

        }
    }
}
@D13_Dreinig

ChrisJ

Alter Hase

Beiträge: 487

Wohnort: Schweich

Beruf: Schüler

  • Private Nachricht senden

3

27.07.2007, 00:35

aus dem buch "spieleprogrammierung" von lennart steinke, oder? der hat sowieso einen unsauberen stil finde ich :/
"Don't trust your eyes: They are a hell of a lot smarter than you are"

Firefly

Alter Hase

Beiträge: 484

Wohnort: Irgendwoundnirgendwo

  • Private Nachricht senden

4

27.07.2007, 10:19

das ganze soll die möglichkeit zur abfrage von tastaturereignissen wie KeyDown und KeyUP dienen

5

27.07.2007, 10:33

naja ich habs net so ganz gecheckt. egal vorerst..
Ich fahr jetz in Urlaub nach Ungarn 2 Wochen. Bis dann ich wünsch euch ne schöne Zeit. Bye und danke für eure Hilfe.

Und nicht zuviel rubbeln.... scherz... musste sein^^

Bye
MfG
amidamaru aka Tibor Fober
Dave Matthews Band ROCKT !!!

www.davematthewsband.com

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

6

27.07.2007, 11:02

Zitat von »"amida maru"«


Und nicht zuviel rubbeln.... scherz... musste sein^^


Ja, gleichfalls!
@D13_Dreinig

Werbeanzeige