Pfeil+Tastensteuerung, nur wie?



  • Hallo zusammen,

    Ich versuche mich gerade daran ein kleines Spiel zu schreiben... Zu meinem Problem, was eigentlich ganz simple ist.
    Ich will einen Button nach links, bzw. rechts steuern. Egal ob mit den Pfeiltasten oder WASD etc.
    Ich habe ein KeyDown Ereignis angelegt und das ganze funktioniert auch schon mit den Standard Tasten, also Space/Esc. Nun will ich, wie gesagt aber eigene Tasten verwenden. Wie ?

    //button1 = Ship
    	private: System::Void Ship_KeyDown(System::Object^  sender, System::Windows::Forms::KeyEventArgs^  e) 
    			 {
    
    						x=x+10;
    						this->Ship->Location = System::Drawing::Point(x, y);
    
    			 }
    

    Jedes mal wenn eine Taste (Z.B. die Rechte Pfeiltaste) gedrückt wird, soll sich der Button um 10 pxl. nach Rechts verschieben.

    Habs auch schon damit versucht:

    #include "Windows.h"
    #define VK_KEY_D 'D' //brauch ich das ?
    .
    .
    int GetAsyncKeyState(int VirtualKeyCode);
    
    if(GetAsyncKeyState(VK_KEY_D) !=1 ) //Wenn D gedrückt ist, dann...
    	    {
                   //DoThings
                }
    

    Ich glaube, ich bin aufm Holzweg. Kann mich da mal jemand aufklären. Bin noch ein totaler Neuling 😕



  • Ich würde das so machen und C# nehmen, was ich Dir auch empfehle...

    private: System::Void Form1_KeyDown(System::Object^  sender, System::Windows::Forms::KeyEventArgs^  e) 
    			 {
    				 if(e->KeyCode == Keys::Left && label1->Left >0)//Links:
    				 {
    					 label1->Left -= 10;
    				 }
    
    				 if(e->KeyCode == Keys::Right && label1->Left < (this->Width - label1->Width))//Rechts:
    				 {
    					 label1->Left += 10;
    				 }
    			 }
    


  • Kleiner Ausschnitt aus nem Programm von mir (bei mir funktioniert das)
    Wichtig ist, dass du alle Buttons auf "Enabled->false;" stellst, da die Windows Funktion den aktiven Button zu wechseln vorrang hat.

    private: System::Void Form1_KeyDown(System::Object^  sender, System::Windows::Forms::KeyEventArgs^  e) {
    switch(e->KeyData)
    				{ 
    					case Keys::Left:
    					    // Deine Aktion....
    					break;
    
    					case Keys::Right:
    		                            // 
    					break;
    
    					default:
    					break;
    				}
    }
    

    Für spezielle Buchstaben hab ich keine Beispiele, probiers am besten mit "case Keys:: D:"


Log in to reply