2016-06-05 5 views
2


Ich versuche, einige Komponententestmethoden zu schreiben. Ich möchte eine Methode testen, die prüft, ob die Taste gedrückt oder losgelassen wird. Und hier ist meine Frage:SFML/C++ Benutzereingabe simulieren

Ist es in SFML mit C++ möglich, zufälliger Tastendruck auf der Tastatur zu simulieren?

Oder muss ich nur mir selbst vertrauen, dass das funktioniert?

+0

Darf ich zumindest wissen, wofür ich abstimmen darf? –

+0

Jemand hat abgestimmt, weil sie die Frage zu weit gefasst haben, aber das ist hier nicht der Fall. Sie fragen nach einer bestimmten Bibliothek. – coyotte508

+0

Wie für Ihre Frage, http://en.sfml-dev.org/forums/index.php?topic=14611.0 Antworten Teil davon (nicht global simulieren) – coyotte508

Antwort

2

die Interna von sf::Keyboard::isKeyPressed würde Simulation schwierig machen, aber wenn Sie schauen, KeyPressed zu simulieren oder keyReleased Ereignisse ich bin mir ziemlich sicher, sollten folgende arbeiten:

Ich kann dies im Moment nicht testen ... Wenn es funktioniert, dann sollten Sie in der Lage sein, ähnliche Funktionen für andere Ereignisse zu machen.

+0

Ich denke, du hast gerade mein Problem gelöst: D Danke, sehr hilfreich :) –

+0

@JakubStasiak Freut mich zu hören! Ich nehme an, der Code ist korrekt? Viel Glück mit Ihrem Programm. – Conduit

1

Sicher können Sie, wenn Sie einen eigenen Schlüsselmanager verwenden. Ein Beispiel in C mit SDL (aber seine genau das gleiche in C++ mit SFML, nur wenige Namen ändern):

typedef struct 
    { 
     char key[SDLK_LAST]; 
     int mousex,mousey; 
     int mousexrel,mouseyrel; 
     char mousebuttons[8]; 
      char quit; 
    } Input; 


void UpdateEvents(Input* in) 
{ 
    SDL_Event event; 
    while(SDL_PollEvent(&event)) 
    { 
     switch (event.type) 
     { 
     case SDL_KEYDOWN: 
      in->key[event.key.keysym.sym]=1; 
      break; 
     case SDL_KEYUP: 
      in->key[event.key.keysym.sym]=0; 
      break; 
     case SDL_MOUSEMOTION: 
      in->mousex=event.motion.x; 
      in->mousey=event.motion.y; 
      in->mousexrel=event.motion.xrel; 
      in->mouseyrel=event.motion.yrel; 
      break; 
     case SDL_MOUSEBUTTONDOWN: 
      in->mousebuttons[event.button.button]=1; 
      break; 
     case SDL_MOUSEBUTTONUP: 
      in->mousebuttons[event.button.button]=0; 
      break; 
     case SDL_QUIT: 
      in->quit = 1; 
      break; 
     default: 
      break; 
     } 
    } 
} 

int main() 
{ 
    Input in; 

    memset(&in,0,sizeof(in)); 
    while(!in.key[SDLK_ESCAPE] && !in.quit) 
    { 
     UpdateEvents(&in); 
     if (in.mousebuttons[SDL_BUTTON_LEFT]) 
     { 
      in.mousebuttons[SDL_BUTTON_LEFT] = 0; 

     }  

     if (in.key[SDLK_UP] && in.key[SDLK_LEFT]) 
       { 

       } 

    } 
    return 0; 
} 

Edit: https://github.com/dabbertorres/SwiftInputManager

Kann nicht: einen Schlüsselmanager für C++ SFML gefunden Ihnen meine eigenen Code Ursache der Code nicht in Englisch