当我想使用SDL2和C ++创建一个带有以下代码的窗口时:
#include <SDL2/SDL.h>
#include <iostream>
#include <time.h>
using namespace std;
const int SCREEN_WIDTH = 800;
const int SCREEN_HEIGHT = 600;
const int FPS = 60;
bool quit = false;
SDL_Window* window = NULL;
SDL_Renderer* renderer = NULL;
SDL_Rect player = {0, 0, 10, 10};
int init(){
if( SDL_Init( SDL_INIT_VIDEO ) < 0 ){
cout<<"SDL could not be initialized! SDL_Error: "<<SDL_GetError();
return 1;
}
else{
window = SDL_CreateWindow(
"SDL Tutorial",
SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED,
SCREEN_WIDTH,
SCREEN_HEIGHT,
SDL_WINDOW_SHOWN);
if( window == NULL ){
//printf( "Window could not be created! SDL_Error: %s\n", SDL_GetError() );
return 1;
}
else{
return 0;
}
}
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
}
void Events(){
SDL_Event event;
while(SDL_PollEvent( &event ) != 0) {
//User requests quit
if( event.type == SDL_QUIT ){
quit = true;
}
if(event.type == SDL_MOUSEMOTION){
player.x = event.motion.x;
player.y = event.motion.y;
}
else if(event.type == SDL_KEYDOWN){
//Select surfaces based on key press
switch( event.key.keysym.sym ) {
case SDLK_UP:
cout<<"Pfeiltaste nach oben wurde gedrückt!"<<endl;
break;
case SDLK_DOWN:
cout<<"Pfeiltaste nach unten wurde gedrückt!"<<endl;
break;
case SDLK_LEFT:
cout<<"Pfeiltaste nach links wurde gedrückt!"<<endl;
break;
case SDLK_RIGHT:
cout<<"Pfeiltaste nach rechts wurde gedrückt!"<<endl;
break;
case SDLK_ESCAPE:
quit = true;
break;
default:
cout<<"Irgendeine Taste wurde gedrückt"<<endl;
break;
}
}
}
}
void Loop(){
while(!quit){
//Events:
Events();
//<Game-Code>
//</Game-Code>
//<Draw-Code>
SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
if (SDL_RenderClear(renderer)!=0) {
cout<<"Fehler: "<<SDL_GetError()<<endl;
}
SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255);
SDL_RenderFillRect(renderer, &player);
SDL_RenderPresent(renderer);
//</Draw-Code>
}
}
void Cleanup(){
SDL_DestroyRenderer(renderer);
renderer = NULL;
SDL_DestroyWindow(window);
window = NULL;
SDL_Quit();
}
int main( int argc, char* args[] ){
if(init() != 0){
cerr<<"Ein Fehler ist bei der Initialisierung aufgetreten!"<<endl;
}
Loop();
Cleanup();
return 0;
}
然后它只是创建一个窗口,当前窗口显示在我的桌面上: http://imgur.com/Kj4N5V6
我不知道我做错了什么,请帮助我; - )
我知道代码不是最好的,但我希望它是可以理解的xD
答案 0 :(得分:1)
我发现错误,在init()函数中我有一个返回0的else语句,因此程序永远不会到达渲染器= SDL_CreateRenderer() 但再次感谢你的帮助; - )