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

Chef-Koch

Treue Seele

  • »Chef-Koch« ist der Autor dieses Themas

Beiträge: 115

Wohnort: Ulm

  • Private Nachricht senden

1

28.12.2006, 19:19

Warum erkennt mein Programm VK_W nicht?

hi alle. Ich habe eine kurze Frage: Ich wollte in mein "spiel" eine alternative Steuerung einbauen, die ueber die Tasten : W,A,S,D geht. Aber wenn ich nun schreibe:

C-/C++-Quelltext

1
2
3
[..]
if(GetAsyncKeyState(VK_S))
[..]

spuckt der Comiler mir nur Fehlermeldungen aus, das VK_W ein nichtdeklarierter Bezeichner sei. Ich finde das etwas komisch da er VK_UP,DOWN,LEFT,RIGHT,SPACE und SHIFT erkennt.
Weiß irgendjemand, an was es liegen koennte? Ich habe Davids Programm ("das erste Dreieck") als Grundstrucktur genommen deshalb sin die Header noch die gleichen, habe daran nichts veraendert.

Danke fuer eure Hilfe.

2

28.12.2006, 19:28

öhm irgendwie ist das sinnfrei ... du hast in deinem Code VK_S angegeben und dein Compiler soll sich über VK_W beschweren? ich glaube kaum :D
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

3

28.12.2006, 19:38

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
#define VK_A 0x41
#define VK_B 0x42
#define VK_C 0x43
#define VK_D 0x44
#define VK_E 0x45
#define VK_F 0x46
#define VK_G 0x47
#define VK_H 0x48
#define VK_I 0x49
#define VK_J 0x4A
#define VK_K 0x4B
#define VK_L 0x4C
#define VK_M 0x4D
#define VK_N 0x4E
#define VK_O 0x4F
#define VK_P 0x50
#define VK_Q 0x51
#define VK_R 0x52 
#define VK_S 0x53
#define VK_T 0x54
#define VK_U 0x55
#define VK_V 0x56
#define VK_W 0x57
#define VK_X 0x58
#define VK_Y 0x59
#define VK_Z 0x5A
#define VK_SPACE    32
#define VK_NUMPAD0    0x60
#define VK_NUMPAD1    0x61
#define VK_NUMPAD2    0x62
#define VK_NUMPAD3    0x63
#define VK_NUMPAD4    0x64
#define VK_NUMPAD5    0x65
#define VK_NUMPAD6    0x66
#define VK_NUMPAD7    0x67
#define VK_NUMPAD8    0x68
#define VK_NUMPAD9    0x69
#define VK_RETURN    13
#define SC_MINIMIZE 0xF020
#define SC_MAXIMIZE 0xF030
#define SC_CLOSE 0xF060


Möge GOOGLE mit dir sein ;)

Ich nehme mal an das du den Header, der die VKs definiert, nicht eingebunden hast. Ich kann dir jetzt auch nicht sagen welcher das ist da ich mir immer die Hexcodes raussuche. In der MSDN vom Visual Studio stehts aber drin und in der online Version sollte es wohl auch stehen.

http://msdn2.microsoft.com/de-de/default.aspx

Chef-Koch

Treue Seele

  • »Chef-Koch« ist der Autor dieses Themas

Beiträge: 115

Wohnort: Ulm

  • Private Nachricht senden

4

28.12.2006, 19:54

des dachte ich auch , aber er nimmt ja verschiedene VKs an, andere aber nicht(z.B. W,S,A,D ). Ich dachte nur, vllt. hat das ja Tribasetechnische Hintergruende ...

Der Compiler beschwert sich generell bei solchen Tasten. (W A S D F ....)

Firefly

Alter Hase

Beiträge: 484

Wohnort: Irgendwoundnirgendwo

  • Private Nachricht senden

5

28.12.2006, 19:57

Das liegt daran dass es eigentlich keine definierten Virtual Keycodes für Buchstaben gibt.
Dafür wurde speziell WM_CHAR eingeführt!

Um Buchstabentasten trotzdem über GetAsyncKeyState oder WM_KEYDOWN/UP zu nutzen muss nur die Hexadezimalcodes benutzen

Chef-Koch

Treue Seele

  • »Chef-Koch« ist der Autor dieses Themas

Beiträge: 115

Wohnort: Ulm

  • Private Nachricht senden

6

28.12.2006, 20:01

ahaa. Ok danke, probier ich gleich mal aus :)
ok funktioniert *juhu*

Chef-Koch

Treue Seele

  • »Chef-Koch« ist der Autor dieses Themas

Beiträge: 115

Wohnort: Ulm

  • Private Nachricht senden

7

28.12.2006, 21:13

sorry fuer doppelpost, aber es geht doch nicht :shock: .
ichhabe den Code jetzt so geschrieben:

anstatt:

C-/C++-Quelltext

1
if(GetAsyncKeyState(VK_S))


C-/C++-Quelltext

1
if(GetAsyncKeyState(0x53))


Ich denke, dass schon erkannt wird, dass eine Taste gedrueckt wird, aber es kommt trotzdem der Fehler, dass die Textur einfach verschwindet.
Ich habe mal in meinem Funktionierenden Code VK_UP mit einem Hexadezimalcodes ersetzt und siehe da, der Fehler tauchte beim Druecken dieserTaste auch auf.
Kann jemand helfen?

8

28.12.2006, 21:28

Debuger benutzen ;)

Du hast jetzt nicht gepostet was passiert wenn die Tasste gedrückt wird. Aber ich vermute mal es wird was sein wie

C-/C++-Quelltext

1
2
3
4
if(GetAsyncKeyState(0x53)) 
{
   Position.y += 1.0f;
}

Prüf mal deinen Wert. Wenn er recht hoch ist verschwindet die Textur da ihre Position pro Frame verändert wird. Also bei 60 Frames 60 mal.

Poste mal mehr code, vieleicht kann man es dann sehen

Chef-Koch

Treue Seele

  • »Chef-Koch« ist der Autor dieses Themas

Beiträge: 115

Wohnort: Ulm

  • Private Nachricht senden

9

29.12.2006, 00:06

hier ist mal so eine if Schleife:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    if(GetAsyncKeyState(0x57))
    {   
        Textur2 = "Panzer_Up_blau.bmp";

                for(int w = 0; w < 6; w++)
                    {       
                    Speed = Crash(g_aPanzer, &g_aZeugs[w], Speed, fSecsPassed, "up");

                    if(Speed < 0.0f)
                    w = 6;
                    }

            g_aPanzer2->bVertex[0].y += Speed;
            g_aPanzer2->bVertex[1].y += Speed;
            g_aPanzer2->bVertex[2].y += Speed;
            g_aPanzer2->bVertex[3].y += Speed;

    }


Die Funktion Crash regelt den Speed unf die Kolisionsabfrage. Ich bin mir ziemlich sicher, dass der eigentliche Fehler an den Hexadezimalcodes liegt. Denn sobald ich statt dem "0x57" z.B. VK_UP eingebe, bewegt sich das Fahrzeig ganz normal , solange bis ich z.B. A druecke und damit in eine andere solche if Schleife komme. Danach verschwindet das Fahrzeug und kommt auch nicht mehr, wenn ich die Pfeiltaste nach oben druecke.

Dennoch funktioniert das Programm wunderbar, wenn ich die Steuerung nur auf die Pfeiltasten lege.

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

10

29.12.2006, 01:30

Ich weiß jetzt nicht, warum das sich mit VK_UP anders als mit 0x26 verhalten sollte. Allerdings solltest du mal testen, ob es mit

C-/C++-Quelltext

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

besser geht. Wenn nämlich das erst Bit vom Rückgabewert gesetzt ist dann ist die Taste gedrückt - es gibt auch noch andere Werte außer 0, die irgendwelche anderen Sachen in Bezug auf den letzten Tastendruck anzeigen.

Werbeanzeige