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

FLO2

Treue Seele

  • »FLO2« ist der Autor dieses Themas

Beiträge: 221

Beruf: Schüler

  • Private Nachricht senden

1

04.05.2009, 20:58

Steuerung per Eingabe

Hallo,

Ich bin relativ neu hier und programmiere auch erst seit kurzem.

Meine Frage: Wenn ich z.B. eine Eingabe mit cin mache muss ich erst die Eingabetaste drücken damit die Eingabe gewertet wird. Wenn ich so aber eine Figur über das Spielfeld steuern will z.B. mit W,A,S und D muss ich danach immer die Eingabetaste drücken. Gibt es eine bessere Möglichkeit, dass es sofort nach drücken der Taste gewertet wird.

Ich danke schon im Voraus

2

04.05.2009, 21:16

Hallo FLO2,

GetAsyncKeyState ist wahrscheinlich das, was du suchst.
Siehe MSDN.
fka tm

FLO2

Treue Seele

  • »FLO2« ist der Autor dieses Themas

Beiträge: 221

Beruf: Schüler

  • Private Nachricht senden

3

05.05.2009, 14:25

@TrikkieMikkie: Danke für die schnelle Antwort!

Ich habe jetzt mal in MSDN nachgesehen und habe auch schon etwas ausprobiert:
Das ist alles eine Konsolenanwendung!

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
// Benutzen von GetAsycKeyState
// Test
#include<iostream> 

using namespace std; 

int main() 
{
    char Eingabe;   
    int Zaehler = 3;

    cout << Zaehler << endl;
    
    cin >> Eingabe; // Hier soll "W" eingegeben werden
    if (GetAsycKeyState(VK_W)) // Hier wird überprüft
    {
        Zaehler++;
    }
    
    cout << Zaehler;
    
    system("PAUSE");
    return 0; 
}


Doch es treten zwei Fehler auf:

Quellcode

1
2
c:\dokumente und einstellungen\administrator\eigene dateien\programmieren\programme_i\test4\test4\test4_1.cpp(14) : error C2065: 'VK_W': nichtdeklarierter Bezeichner
c:\dokumente und einstellungen\administrator\eigene dateien\programmieren\programme_i\test4\test4\test4_1.cpp(14) : error C3861: "GetAsycKeyState": Bezeichner wurde nicht gefunden.


Vielleicht stell ich mich grad richtig dumm an, aber ich finde keine Lösung :shock:
Kann mir jemand sagen was ich falsch mache?

4

05.05.2009, 14:35

Add:

C-/C++-Quelltext

1
#include <windows.h>


Exchange:

C-/C++-Quelltext

1
GetAsycKeyState

For:

C-/C++-Quelltext

1
GetAsyncKeyState


That should do it.

5

05.05.2009, 19:15

1. GetAsyncKeyState macht genau das was du willst, nämlich nicht auf die Eingabe warten -> Dein Programm wird sich nacher eh gleich beenden, bzw. du wirst (fast) keine Chance haben, den Zähler zu erhöhen.
2. Ich glaube nicht, dass VK_W standardmäßig definiert ist...

:arrow:

C-/C++-Quelltext

1
2
3
4
5
6
7
int main()
{
while(!(GetAsyncKeyState(0x57)&0x8000))
{
}
system("PAUSE");
}


Wenn du das Programm startest, bleibt es solange in der Schleife, bis du W drückst.

Ich hoffe, das stimmt so alles.

FLO2

Treue Seele

  • »FLO2« ist der Autor dieses Themas

Beiträge: 221

Beruf: Schüler

  • Private Nachricht senden

6

05.05.2009, 19:51

Danke für eure Hilfe. :)
Jetzt hat's geklappt! :idea:
Eine Frage noch: Woher weiß man das z.B.

C-/C++-Quelltext

1
 (!(GetAsyncKeyState(0x57)&0x8000)) 

"W" ist? Steht das irgendwo?

Danke im Voraus,
Pi mal Daumen = 18.84955592

7

05.05.2009, 20:34

http://msdn.microsoft.com/en-us/library/ms645540.aspx

Dort stehen alle VKs.

Zurückgegeben wir ein Short, bei dem das hochwertigste Bit dafür steht, ob die Taste gedrückt wurde. (deshalb das (&0x8000))

FLO2

Treue Seele

  • »FLO2« ist der Autor dieses Themas

Beiträge: 221

Beruf: Schüler

  • Private Nachricht senden

8

05.05.2009, 21:42

Supi
Jetzt ist alles klar, :D
danke :)
Pi mal Daumen = 18.84955592

FLO2

Treue Seele

  • »FLO2« ist der Autor dieses Themas

Beiträge: 221

Beruf: Schüler

  • Private Nachricht senden

9

13.05.2009, 21:30

Jetzt hätte ich noch eine Frage dazu:
Ich möchte das wenn eben die gewählte Taste gedrückt wird etwas bestimmtes ausgegeben wird.
Z.B.:

Quellcode

1
2
3
4
if (GetAsyncKeyState(0x31)&0x8000)
{
         cout << "A" << endl;
}

Doch wenn ich dann im Programm die Taste drücke passiert nichts!
Was muss ich ändern?

Danke im Voraus!
Pi mal Daumen = 18.84955592

killmichnich

unregistriert

10

13.05.2009, 22:08

du musst ne schleife drum rum machen, so schaut er einmal obs gedrückt is, und wenn nich gehts einfach weiter:

C-/C++-Quelltext

1
2
3
4
5
6
7
for(;;)
{
     if (GetAsyncKeyState(0x31)&0x8000)
     {
              cout << "A" << endl;
     }
}

Werbeanzeige