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

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

1

16.05.2007, 10:27

abfrage für 2 gleichzeitig gedrückte tasten

tagchen! :)

also ich hab folgende frage:

ich hab jetz so ein bischen rum experimentiert und so es halbwegs "on my own" geschafft dass ich in einem fenster ein bild mit den pfeiltasten herumsteuern kann...

jetzt ist nur folgendes problem.. ich weiss nicht wie ich es schaffe dass ich das bildchen (ein einfaches X) auch schräg nach unten, schräg noch oben usw. wandern lassen kann.. zur zeit geht halt nur rauf-runter und links-rechts.. es wär aber angenehm zu wissen wie es geht dass mein programm es versteht wenn ich nach unten und nach rechts drücke .. ^^
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

2

16.05.2007, 10:34

warte, ich logge mich mal eben in deinen PC ein und schaue mir den Quellcode an..........
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

3

16.05.2007, 10:45

Re: abfrage für 2 gleichzeitig gedrückte tasten

Entweder du gehst den Weg über Windowmessages und setzt selbst diverse Flags oder du stehst mehr auf polling als auf Events und schaust einfach mit GetAsyncKeyState() ob beide Tasten gedrückt wurden.

Schlussendlich kommt es auch drauf an was du für ein/e API/Framework verwendest: WinAPI, DirectInput, ...
@D13_Dreinig

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

4

16.05.2007, 10:52

nun ja GetAsyncKeyState() mag ich nicht so besonders..

also vorläufig sieht die funktion für die tastenabfrage so aus @ Nox:

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
void Game_ProcessInput (unsigned int wParam)
{
    switch(wParam)
    {
    case VK_LEFT:
        if(Player.x_pos >= STEP_SIZE)
            { Player.x_pos = Player.x_pos - STEP_SIZE; }
        break;

    case VK_RIGHT:
        if(Player.x_pos <= 765)
            { Player.x_pos = Player.x_pos + STEP_SIZE; }
        break;

    case VK_UP:
        if(Player.y_pos >= STEP_SIZE)
            { Player.y_pos = Player.y_pos - STEP_SIZE; }
        break;

    case VK_DOWN:
        if(Player.y_pos <= 528)
            { Player.y_pos = Player.y_pos + STEP_SIZE;}
        break;

    default:
        break;
    }
} // Game_ProcessInput()


@ David:
ich würde das lieber über die windows messages machen, jedoch weiss ich nicht wie das genau funktioniert :D
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

5

16.05.2007, 10:56

Welche API nutzt du? Wird Game_ProcessInput einmal pro Tastendruck und einmal pro Frame aufgerufen? Oder nur einmal pro Tastendruck? oder nur einmal pro Frame?
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

6

16.05.2007, 10:58

Game_ProcessInput() wird bei jeden frame 1mal aufgerufen..

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
// Windoe procedure for messages

_w64 long __stdcall WndProc (HWND hwnd, unsigned int msg, unsigned int wParam, _w64 long lParam)
{
        // Provess message

    switch (msg)
    {
        // Key pressed

    case WM_KEYDOWN:
        {
                // If 'ESCAPE' has been pressed: Quit

            if (wParam == VK_ESCAPE)
                PostQuitMessage (0);

            // Process input..

        Game_ProcessInput(wParam);

        } break;

        // [...]


    return DefWindowProc (hwnd, msg, wParam, lParam);
} // WndProc()
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

16.05.2007, 12:47

Zitat von »"$nooc"«

ich würde das lieber über die windows messages machen, jedoch weiss ich nicht wie das genau funktioniert


Zitat von »"$nooc"«

Game_ProcessInput() wird bei jeden frame 1mal aufgerufen..


soweit ich das sehe:

1) du machst es schon über die windows messages.
2) Game_ProcessInput() wird nur aufgerufen wenn eine taste gedrückt wird.

die imo einfachste lösung wärs, einfach in jedem frame mit GetAsyncKeyState() zu schauen ob gedrückt und wenn ja inkrementieren und fertig. und ich glaub ich bin mit dieser meinung nicht allein ;)

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

8

16.05.2007, 16:05

oh .. mein fehler.. stimmt ja.. hab vergessen dass ProcessInput() nicht bei jeden frame ausgeführt wird.. sry ^^

wie kann ich die GetAsyncKeyState() richtig verwenden?
hadde mal n bischen code? 8)
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

9

16.05.2007, 17:31

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
if( GetAsyncKeyState(VK_LEFT) )
  Player.x_pos -= STEP_SIZE;

if( GetAsyncKeyState(VK_RIGHT) )
  Player.x_pos += STEP_SIZE;

if( GetAsyncKeyState(VK_UP) )
  Player.y_pos -= STEP_SIZE;

if( GetAsyncKeyState(VK_DOWN) )
  Player.y_pos += STEP_SIZE;


in jedem frame halt sowas machen...

Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

10

16.05.2007, 20:46

Du meinst wohl eher:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
if( GetAsyncKeyState(VK_LEFT)<0 )
  Player.x_pos -= STEP_SIZE;

if( GetAsyncKeyState(VK_RIGHT)<0 )
  Player.x_pos += STEP_SIZE;

if( GetAsyncKeyState(VK_UP)<0 )
  Player.y_pos -= STEP_SIZE;

if( GetAsyncKeyState(VK_DOWN)<0 )
  Player.y_pos += STEP_SIZE;


ciao
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender)

Werbeanzeige