使用C ++和SDL2创建一个带有矩形的窗口

时间:2015-03-10 19:30:58

标签: c++ sdl-2 mingw32

当我想使用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

1 个答案:

答案 0 :(得分:1)

我发现错误,在init()函数中我有一个返回0的else语句,因此程序永远不会到达渲染器= SDL_CreateRenderer() 但再次感谢你的帮助; - )