SDL нажатие клавиш

Я пытаюсь создать программу, которая сможет обнаруживать нажатия клавиш с помощью 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).)
При компиляции ошибок не возникает

Теперь я получаю вывод, что наводит меня на мысль, что мои пробники не имеют ничего общего с проверкой ключей; Однако есть вероятность, что это неверно.

0

Решение

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

Другие решения

SDL По умолчанию перенаправляет вывод в stdout.txt

2

Вы должны запрашивать все события SDL в цикле, а не только первый. Попробуйте это, чтобы проверить все события:

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

Также вы можете попробовать обновить экран в цикле с помощью:

SDL_Flip( display );
0

эй, я думаю, ты должен пойти в свой «свойства проекта» затем «Настройки компоновщика» а также «Подсистема» тогда выбирай «Консоль (/ SUBSYSTEM: CONSOLE)» В противном случае вы не сможете увидеть, что набрали в cout, а в visual studio вы не сможете использовать
#include"SDL/SDL.h" вы должны напечатать #include<SDL.h>

0
По вопросам рекламы [email protected]