0

我正在尝试制作一个能够使用 SDL 检测按键的程序。

我当前的代码是别人的修改版本(在制作我自己的版本之前试图让它工作)。

#include "SDL/SDL.h"
#include <iostream>
using namespace std;

int main(int argc, char* argv[]) {
    //Start SDL
    if(0 != SDL_Init(SDL_INIT_EVERYTHING)) {
            std::cout << "Well I'm screwed\n";
            return EXIT_FAILURE;
    }
    SDL_Surface* display;
    display = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
    SDL_Event event;
    bool running = true;
    std::cout << "Cake"; //Testing output (doesn't work)
    while(running) {
            std::cout << "Pie"; //Again, testing output and again doesn't work
            if(SDL_PollEvent(&event)) { //I have tried this is a while statement
                    switch(event.type) {
                            case SDL_KEYDOWN:
                                    std::cout << "Down\n"; // Have tried "<< std::endl" instead of "\n"
                                    break;
                            case SDL_KEYUP:
                                    std::cout << "Up\n";
                                    break;
                            case SDL_QUIT:
                                    running = false;
                                    break;
                            default:
                                    break;
                    }
            }
    }
    //Quit SDL
    SDL_Quit();

    return 0;
}

此代码应该检测任何按键/向上并输出它,但它不输出任何内容。

我的最终目标是让它检测到 konami 代码,然后做一些事情。

我不断更新上面的代码,使其与我正在使用的代码相同(除了添加了人们建议的注释)。

如果它有帮助:g++ -o myprogram.exe mysource.cpp -lmingw32 -lSDLmain -lSDL是我用来编译的命令。(如果你没有从命令中弄清楚,我运行的是windows(7)。)编译时没有错误发生

我现在得到了任何输出,这让我相信我的概率与密钥检查无关;但是有可能是不正确的。

4

4 回答 4

3

SDL 需要一个窗口来接收事件。

取消注释您的SDL_SetVideoMode()电话:

#include <SDL/SDL.h>
#include <iostream>
using namespace std;

int main( int argc, char* argv[] ) 
{
    if( 0 != SDL_Init(SDL_INIT_EVERYTHING) ) 
    {
        std::cout << "Well I'm screwed\n";
        return EXIT_FAILURE;
    }

    SDL_Surface* display;
    display = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);

    SDL_Event event;
    bool running = true;
    while(running) 
    {
        if(SDL_PollEvent(&event)) 
        {
            switch(event.type) 
            {
            case SDL_KEYDOWN:
                std::cout << "Down" << endl;
                break;
            case SDL_KEYUP:
                std::cout << "Up" << endl;
                break;
            case SDL_QUIT:
                running = false;
                break;
            default:
                break;
            }
        }
    }

    SDL_Quit();
    return 0;
}
于 2013-07-15T15:22:22.110 回答
2

SDL 默认将输出重定向到 stdout.txt

于 2013-07-15T20:40:53.283 回答
0

嘿,我认为你应该去你的“项目属性”然后“链接器设置”“子系统”然后选择“控制台(/SUBSYSTEM:CONSOLE)” 否则你看不到你在cout和Visual Studio中输入的内容你不能使用 #include"SDL/SDL.h" 你应该输入#include<SDL.h>

于 2015-04-11T18:54:31.337 回答
0

您应该查询循环中的所有 SDL 事件,而不仅仅是第一个。试试这个来检查所有事件:

while( SDL_PollEvent( &event ) ){
    ...
}

您也可以尝试在循环中更新屏幕:

SDL_Flip( display );
于 2013-07-15T10:27:28.630 回答