[英]Creating a Window with a Rectangle in it with C++ and SDL2
When i want to create a window using SDL2 and C++ with the following Code: 当我想使用以下代码使用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;
}
then it just creates a window with my current windows appearing on my desktop: http://imgur.com/Kj4N5V6 然后它会创建一个窗口,其中当前窗口显示在桌面上: http : //imgur.com/Kj4N5V6
I have no clue, of what i am doing wrong, please help me ;-) 我不知道我在做什么错,请帮助我;-)
I know the code is not the best, but i hope it's understandable xD 我知道代码不是最好的,但我希望它是可以理解的xD
我发现错误,在init()函数中,我有一个else语句,该语句返回0,因此程序永远不会到达renderer = SDL_CreateRenderer(),但再次感谢您的帮助;-)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.