SDL键盘输入未触发

时间:2017-04-19 23:04:35

标签: c++ eclipse input sdl

我正在尝试制作一个简单的文字游戏,但我遇到了一个奇怪的问题。我有一个类设置为使用SDL_KEYDOWN从用户的键盘获取输入。当调用函数Candidate时,它会运行一个循环,轮询键盘输入并返回按钮的字符串。奇怪的是,按下按键无效。代码在我的while循环中停止,但似乎我的函数根本没有效果。

这是我的主要代码:

check_event()

这是我的输入类.cpp

#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;
}

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

有多个红旗。

首先,std::cout不适用于。该库使用窗口,而不是控制台/终端。如果要渲染文本,请阅读相应的教程。

其次,如果您尚未初始化事件处理程序,则无法检查事件。您应该在循环之前添加SDL_Event event;

第三,使用来处理输入是不必要的,这更合适:

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
    }
}