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

11

08.03.2009, 17:54

Zitat

Klappts denn?
Nö klappt nicht!

Zitat

vergiß WinMain, da hast du eben normalerweise kein Konsolenfenster. mach ne konsolenanwendung (ganz normale int main) aber mach den rest so, dann müsste es klappen.
Klappt auch nicht.
"Der Wald wäre sehr leise, wenn nur die begabtesten Vögel singen würden."

12

08.03.2009, 18:09

Okay.

[size=7]Wie wärs, wenn du eine Problembeschreibung liefern könntest?[/size]

13

08.03.2009, 18:48

Sorry wenn ich einfach nur "Klappt nicht!" geschrieben habe. Es ist einfach so das ich ja noch ein ziemlicher Newbie auf dem Gebiet der C++ Programmierung bin und ich ehrlich gesagt oftmals nicht so richtig weiß wie was miteinander zusammenhängt. Daher kann ich jetzt auch noch keine genaue Problembeschreibung liefern außer das ich für mein Pacmanspiel gerne die Tasten abfragen würde mit denen ich dann die Spielfigur steuern kann. Ich dachte das Konsolenfenster würde bei Escape geschlossen nachdem ich statt WINAPI WinMain nur main eingegeben habe aber ich denke durch diese Try and Error Methode komme ich wohl auch nicht weiter - ich muss mich da wohl noch mehr mit dem Inhalt beschäftigen. Trozdem erstmal Danke ;)
"Der Wald wäre sehr leise, wenn nur die begabtesten Vögel singen würden."

14

08.03.2009, 20:49

also was genau klappt jetz nicht? bekommst du nen Compilerfehler, nen Linkerfehler, kein Fenster, funktioniert die Steuerung nicht, oder die ausgabe?

15

08.03.2009, 21:59

Die Steuerung funzt nicht. Compiler oder Linkerfehler bekomme ich keinen und das Konsolenfenster wird auch angezeigt.
"Der Wald wäre sehr leise, wenn nur die begabtesten Vögel singen würden."

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

16

09.03.2009, 08:56

Was hast du denn gegen GetAsyncKeyState? Eventbasiert die Tastatureingabe abzufragen bringt sowiso meistens nicht das gewünschte Ergebnis, beim Inputhandling von Spielen.

17

09.03.2009, 16:58

Überprüfe mal, ob die Nachrichten nicht ankommen (logfile-einträge in der WndProc). falls ja, klappts aus irgendeinem Grund nicht, ne nachrichtenschleife fürs Konsolenfenster zu bauen. Falls nein, hast du irgendwo bei der änderung der position des x oder dem Zeichnen desselbigen einen Fehler.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

18

09.03.2009, 19:02

Zitat von »"PCShadow"«

Überprüfe mal, ob die Nachrichten nicht ankommen (logfile-einträge in der WndProc). falls ja, klappts aus irgendeinem Grund nicht, ne nachrichtenschleife fürs Konsolenfenster zu bauen. Falls nein, hast du irgendwo bei der änderung der position des x oder dem Zeichnen desselbigen einen Fehler.


Woher soll denn das Konsolenfenster wissen das er genau in seinem Msg-Handler die Nachrichten verarbeiten will? :shock:

19

09.03.2009, 19:11

Zitat von »"David_pb"«

Woher soll denn das Konsolenfenster wissen das er genau in seinem Msg-Handler die Nachrichten verarbeiten will? :shock:

Weils sein konsolenfenster ist *schulterzuck* nein, ich wusste das auch nicht sicher, aber einen versuch war es imo wert.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

20

09.03.2009, 19:27

Fürs Inputhandling in der Konsole kann man direkt den Inputpuffer verwenden:

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
void KeyboardEventHandler( KEY_EVENT_RECORD rec )
{
    if ( rec.bKeyDown )
        printf( "key pressed => %d\n", rec.wVirtualKeyCode );
    else
        printf( "key released => %d\n", rec.wVirtualKeyCode );
}

void MouseEventHandler( MOUSE_EVENT_RECORD rec )
{
    if ( rec.dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED )
        printf( "Clicked at %dx%d\n", rec.dwMousePosition.X, rec.dwMousePosition.Y );
}

int main()
{
    DWORD numEvents;
    INPUT_RECORD inputBuffer[0x7f];
    HANDLE hConsole = GetStdHandle( STD_INPUT_HANDLE );

    while ( true )
    {
        GetNumberOfConsoleInputEvents( hConsole, &numEvents );

        if ( numEvents > 0 )
        {
            ReadConsoleInput( hConsole,
                inputBuffer,
                sizeof( inputBuffer ) / sizeof( 0[ inputBuffer ] ),
                &numEvents );

            for ( int i = 0; i < numEvents; ++i )
            {
                PINPUT_RECORD pRec = &inputBuffer[i];

                switch ( pRec->EventType )
                {
                case KEY_EVENT:
                    KeyboardEventHandler(
                        pRec->Event.KeyEvent );
                    break;

                case MOUSE_EVENT:
                    MouseEventHandler( 
                        pRec->Event.MouseEvent );
                    break;
                }
            }
        }
    }
}

Werbeanzeige