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

このコードは、キーダウン/キーアップを検出して出力するはずですが、何も出力しません。

私の最終的な目標は、コナミ コードを検出して何かを実行することです。

上記のコードを常に更新して、使用しているものと同じにします(人々が提案したコメントを追加した場合を除く)。

また、それが役立つ場合:g++ -o myprogram.exe mysource.cpp -lmingw32 -lSDLmain -lSDLコンパイルに使用しているコマンドです。(コマンドでわからない場合は、windows (7) を実行しています。) コンパイル時にエラーは発生しません。

私は今、出力を取得しています。これにより、私の問題はキーチェックとは何の関係もないと信じるようになります。ただし、正しくない可能性があります。

4

4 に答える 4

2

SDL デフォルトでは、出力を stdout.txt にリダイレクトします

于 2013-07-15T20:40:53.283 に答える
0

「プロジェクトのプロパティ」「リンカーの設定」「サブシステム」の順に移動して、 「コンソール (/SUBSYSTEM:CONSOLE)」を選択する必要があると思います 。#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 に答える