2017-08-11 4 views
1

Ich habe versucht, ein einfaches C++ Spiel in Visual Studio 2017 zu erstellen, aber ich kann nicht einmal einen einfachen schwarzen Bildschirm bekommen. Das Fenster erscheint weiß und reagiert nicht, kann jemand helfen? Ich habe von einem kostenlosen Kurs bei Udemy gelernt, es hat bis jetzt funktioniert. Mein Code ist unten.Visual Studio 2017 leeres Fenster, nicht mehr reagierend

#include <iostream> 
#include <SDL.h> 
#include <string> 
using namespace std; 
int main(int argc, char* argv[]) { 
    const int screenWidth = 800; 
    const int screenLength = 600; 
    if (SDL_Init(SDL_INIT_VIDEO) < 0) { 
     cout << "SDL init faliure" << endl; 
     return 0; 

    } 
    SDL_Window *window = SDL_CreateWindow("Particle Fire", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, screenWidth, screenLength, SDL_WINDOW_SHOWN); 
    SDL_Delay(100000); 

    if (window == NULL) { 
     SDL_Quit(); 
     return 2; 
    } 
    SDL_Renderer * renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_PRESENTVSYNC); 
    SDL_Texture * texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_STATIC, screenWidth, screenLength); 

     if (renderer == NULL) { 
      cout << "Could not produce renderer"; 
      SDL_DestroyWindow(window); 
       SDL_Quit(); 
      return 3; 

     } 
    if (texture == NULL) { 
     cout << "Could not produce texture"; 
     SDL_DestroyRenderer(renderer); 
     SDL_DestroyWindow(window); 
      SDL_Quit(); 
     return 3; 
    } 
    Uint32 *buffer = new Uint32[screenWidth*screenLength]; 
    memset(buffer, 0xFF, screenWidth*screenLength*sizeof(Uint32)); 
    for (int i=0; i < screenWidth*screenLength; i++) { 

     buffer[i = 0xFFFF0000]; 
    } 
    SDL_UpdateTexture(texture, NULL, buffer, screenWidth * sizeof(Uint32)); 
    SDL_RenderClear(renderer); 
    SDL_RenderCopy(renderer, texture, NULL, NULL); 
    SDL_RenderPresent(renderer); 
    bool quit = false; 
    SDL_UpdateTexture(texture, NULL, buffer, screenWidth * sizeof(Uint32)); 
     SDL_RenderClear(renderer); 
     SDL_RenderCopy(renderer,texture , NULL, NULL); 
     SDL_RenderPresent(renderer); 
    SDL_Event event; 
    while (!quit) { 

     while (SDL_PollEvent(&event)) { 
      if (event.type == SDL_QUIT) { 
       quit = true; 
      } } 

    } 
    delete buffer; 
    SDL_DestroyTexture(texture); 
     SDL_DestroyRenderer(renderer); 
    SDL_DestroyWindow(window); 
    SDL_Quit(); 
} 

Ich habe versucht, alles zu ändern, aber es funktioniert nicht.

+0

Ich weiß nicht, SDL, also bin ich neugierig: Brauchen Sie wirklich den ganzen Code, um nichts als einen schwarzen Bildschirm zu bekommen? Wenn das wirklich der Fall ist, würde ich definitiv etwas anderes verwenden – user463035818

+0

@ tobi303 Es ist nicht SDL, das ist der Fall für fast alle C++ - Bibliotheken. – cdo256

+0

@ tobi303 die SDL soll Low-Level sein, so ist es normal, dass es eine Menge Code benötigt – litelite

Antwort

3

Sie haben sofort nach dem Erstellen des Fensters SDL_Delay(100000); eine Verzögerung von 100 Sekunden.

Außerdem müssen Sie buffer[i = 0xFFFF0000] zu buffer[i] = 0xFFFF0000 ändern. Der erste setzt i und lässt den Puffer unverändert. Die zweite macht das Pixel gelb.