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

kiba

Alter Hase

  • »kiba« ist der Autor dieses Themas

Beiträge: 327

Wohnort: NRW

Beruf: Azubi: Fach-Info. Anw.

  • Private Nachricht senden

1

15.03.2009, 13:52

[Erledigt] Nur 1 mal drücken" Tastenabfrage

hi, Hab ein problem mir meiner Tastenabfrage Funktion.
Die Abfrage soll das "Nur 1 mal drücken" simulieren, also nicht gedrückt halten.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
bool getPressOnceMouse(int key){
    if(getPressMouse(key)){
        if (!old_mouse[key]){
            mouse[key] = true;
        }else{
            mouse[key] = false;
        }
    }
    old_mouse[key] = getPressMouse(key);

    return mouse[key];
}

Das Funktierniert auch, aber auch nur bei Abfrage von verschieben Tasten.
Bei der Abfrage einer gleichen Taste funktioniert das nur das 1. mal.

C-/C++-Quelltext

1
2
3
input.update() //input update

funktion1(); //1. abfrage , links klick auf ein object

funktion2(); //2. abfrage, links klick auf ein anderes object, funktiert nicht


wenn ich das jetzt aber so mache funktionert es:

C-/C++-Quelltext

1
2
3
input.update() //input update

funktion1(); //1. abfrage , links klick auf ein object

funktion2(); //2. abfrage, rechts klick auf ein anderes object, funktioniert

2

15.03.2009, 15:39

Re: "Nur 1 mal drücken" Tastenabfrage

Würd mal raten es sollte wie folgt heißen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
bool getPressOnceMouse(int key){
    if(getPressMouse(key)){
        if (!old_mouse[key]){
            mouse[key] = true;
        }else{
            mouse[key] = false;
        }
    }
    else
    {
        mouse[key] = false;
    }
    old_mouse[key] = getPressMouse(key);

    return mouse[key];
}


Empfehle dir allerdings zu debuggen, um in Zukunft solche Fehler zu finden.

Gruß
Markus

kiba

Alter Hase

  • »kiba« ist der Autor dieses Themas

Beiträge: 327

Wohnort: NRW

Beruf: Azubi: Fach-Info. Anw.

  • Private Nachricht senden

3

15.03.2009, 16:36

da ändert sich nix

und der Debugger zeigt auch nix an

4

15.03.2009, 17:22

Zitat von »"kiba"«

und der Debugger zeigt auch nix an


Was soll das heißen? Normalerweise zeigt er dir die Werte und Zuweisungen deiner Variablen...
Setz nen Breakpoint bei

C-/C++-Quelltext

1
if(getPressMouse(key)){ 

und gehs Schritt für Schritt durch.


Gruß
Marku

kiba

Alter Hase

  • »kiba« ist der Autor dieses Themas

Beiträge: 327

Wohnort: NRW

Beruf: Azubi: Fach-Info. Anw.

  • Private Nachricht senden

5

16.03.2009, 14:40

Hab das Problem anders gelöst:

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
bool keys[256];
bool old_keys[256];

void Keyupdate(){
   Input.update();
    for(int key = 0;key < 255;key++){
        if(Input.getPressKey(key)){
            if (!old_keys[key]){
                keys[key] = true;
            }else{
                keys[key] = false;
            }
        }else{
           keys[key] = false;
        }
        old_keys[key] = Input.getPressKey(key);
    }
}

bool getPressOnceKey(int key){
    return keys[key];
}

bool getPressKey(int key){
    return Input.getPressKey(key)
}

DasBlub

Alter Hase

Beiträge: 802

Wohnort: Schweiz

Beruf: Programmierer

  • Private Nachricht senden

6

16.03.2009, 18:09

Zitat von »"kiba"«

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
        if(Input.getPressKey(key)){
            if (!old_keys[key]){
                keys[key] = true;
            }else{
                keys[key] = false;
            }
        }else{
           keys[key] = false;
        }

wäre so einfacher:

C-/C++-Quelltext

1
keys[key] = Input.getPressKey(key) && !old_keys[key];

Werbeanzeige