Я пытаюсь создать программу, которая сможет обнаруживать нажатия клавиш с помощью 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).)
При компиляции ошибок не возникает
Теперь я получаю вывод, что наводит меня на мысль, что мои пробники не имеют ничего общего с проверкой ключей; Однако есть вероятность, что это неверно.
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;
}
SDL По умолчанию перенаправляет вывод в stdout.txt
Вы должны запрашивать все события SDL в цикле, а не только первый. Попробуйте это, чтобы проверить все события:
while( SDL_PollEvent( &event ) ){
...
}
Также вы можете попробовать обновить экран в цикле с помощью:
SDL_Flip( display );
эй, я думаю, ты должен пойти в свой «свойства проекта» затем «Настройки компоновщика» а также «Подсистема» тогда выбирай «Консоль (/ SUBSYSTEM: CONSOLE)» В противном случае вы не сможете увидеть, что набрали в cout, а в visual studio вы не сможете использовать
#include"SDL/SDL.h"
вы должны напечатать #include<SDL.h>