2017-04-19 5 views
-1

J'essaie de créer un jeu de texte simple, mais j'ai rencontré un problème étrange. J'ai une classe configurée pour prendre des entrées du clavier de l'utilisateur en utilisant SDL_KEYDOWN. Lorsque la fonction check_event() est appelée, elle exécute une boucle qui interroge l'entrée au clavier et renvoie une chaîne pour le bouton. La chose étrange est que l'appui sur les touches n'a aucun effet. Le code s'arrête pour ma boucle while, mais il semble que ma fonction n'a aucun effet.Les entrées du clavier SDL ne se déclenchent pas

Voici mon code principal:

#include <iostream> 
#include <fstream> 
#include <SDL.h> 
#include "SDL_ttf.h" 
#include "input.h" 


using namespace std; 

Input input; 

int main(int argc, char* argv[]) { 
    if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO) != 0) { 
      SDL_Log("Unable to initialize SDL: %s", SDL_GetError()); 
      return 1; 
     } 

    cout << "Welcome to Hero V1.0!" << endl; //intro stuff 
    cout << "Written By: Jojo" << endl; 
    cout << endl; 

    cout << "1) New Game" << endl; 
    cout << "2) Continue Game" << endl; 


    while (true) { 
     string event = input.check_event(); 
     if(event == "1"){ 
      cout << "Test" << flush; 
     } 
    } 

    SDL_Quit(); 
    return 0; 
} 

Et voici ma classe d'entrée Cpp

#include <iostream> 
#include <SDL.h> 
#include "Input.h" 
using namespace std; 
string Input::check_event() { 
    while (SDL_PollEvent(&event)) { 
      if(event.type == SDL_KEYDOWN){ 
       switch(event.key.keysym.sym){ 
       case SDLK_1: 
        return "1"; 
       } 
      } 
     } 
     return "null"; 
    } 

Toute aide est grandement appréciée.

+1

Vous ne semblez pas avoir créé une fenêtre. SDL n'a pas de fonctionnalité de saisie d'entrée de système complet (qui, pour de nombreuses raisons, peut être problématique ou pas très possible à implémenter). Pour les touches de jeu de texte, vous devez lire depuis stdin (read, getch, ...). – keltar

Répondre

0

Il existe plusieurs drapeaux rouges. En premier lieu, std::cout ne fonctionne pas avec . La bibliothèque utilise des fenêtres, pas des consoles/terminaux. Si vous voulez afficher du texte, lisez un tutoriel approprié. Deuxièmement, vous ne pouvez pas vérifier les événements si vous n'avez pas initialisé un gestionnaire d'événements. Vous devez avoir ajouté SDL_Event event; avant la boucle .

En troisième lieu, en utilisant un pour gérer l'entrée est inutile, cela est plus approprié:

bool quit = false; 
SDL_Event event; 

while (!quit) 
{ 
    while (SDL_PollEvent(&event) != 0) 
    { 
     if (event.type == SDL_QUIT) 
     { 
      quit = true; 
     } 

     // Add if blocks, switch statements, and what have you 
    } 
}