2016-09-08 12 views
-2

私のコードで大きなバグにぶつかりました。私は実行後にゲームの最初のウィンドウを開くことができません!それはちょうど数秒間ブランクを開いてから自動的に閉じます。私は自分のコードに何が間違っているのかわかりません。チュートリアルのシリーズに従っていますし、私のコードはチュートリアルのコードのようです。ここに私のコード:SDL/C++でウィンドウを開くことができません

#include "stdafx.h" 
#include "FirstClass.h" 


FirstClass::FirstClass(void){ 

bool quit = false; 
window = NULL; 
window = SDL_CreateWindow("Snaykie v1.0",350, 150, 800, 500, SDL_WINDOW_SHOWN); 
if (window == NULL){ 
    std::cout << "Can not open the game!" << std::endl; 
} 
renderer = NULL; 
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); 
evt = new SDL_Event(); 
//background image 
txt = NULL; 
txt = IMG_LoadTexture(renderer, "mainview.bmp"); 

rct.x = 0 ; 
rct.y = 0; 
rct.h = 500; 
rct.w = 800; 
//button start 
sbutt = NULL; 
sbutt = IMG_LoadTexture(renderer, "startbutton.bmp"); 

startrct.x = 0 ; 
startrct.y = 0; 
startrct.h = 100; 
startrct.w = 100; 
} 


FirstClass::~FirstClass(void) 
{ 
SDL_DestroyTexture(txt); 
SDL_DestroyTexture(sbutt); 
SDL_DestroyWindow(window); 
SDL_DestroyRenderer(renderer); 
delete evt; 
} 
//the code below is the loops that let the window stucks forever to keep  opened 
void FirstClass :: GameStart(void){ 
while (!quit && evt->type != SDL_QUIT){ 

    SDL_PollEvent(evt); 
    SDL_RenderClear(renderer); 
    SDL_RenderCopy(renderer, txt, NULL, &rct); 
    SDL_RenderCopy(renderer, sbutt, NULL, &startrct); 
    SDL_RenderPresent(renderer); 

} 
} 

私は本当に大きな問題になりますように助けてください。

答えて

1

evt変数が悪い方法で処理されています。割り当てられていますが初期化されていないため、初期化されていない値をSDL_QUITと比較します。 FirstClass::GameStartの中にコードを並べ替えてください(実際には動的に割り当てられている必要がないので)ローカル変数を使用し、コンストラクタとデストラクタから既存のevtの割り当てと削除を削除することをお勧めします。

void FirstClass::GameStart(void){ 
    SDL_Event evt; 
    while (SDL_PollEvent(&evt)){ 
     if (evt.type == SDL_QUIT) { 
      // a user requested termination has been received, exit the loop 
      break; 
     } 
     else { 
      // filter the event? 
      SDL_RenderClear(renderer); 
      SDL_RenderCopy(renderer, txt, NULL, &rct); 
      SDL_RenderCopy(renderer, sbutt, NULL, &startrct); 
      SDL_RenderPresent(renderer); 
     } 
    } 
} 

また、あなたが実際に、mainからFirstClass::GameStart funcionを呼び出している、多分あなたは、単にすべてでイベントループを実行していないことを確認します。ここではFirstClass::GameStartの改良版です。

+0

これは完璧に機能してくれてありがとう、ありがとうございましたが、「while(SDL_PollEvent(&evt)!= SDL_QUIT)」という不在があります。 – The1Dev

+0

@ The1Dev 'SDL_PollEvent(&evt)!= SDL_QUIT'それはどんなナンセンスですか?おそらく、あなたは[documentation](https://wiki.libsdl.org/SDL_PollEvent)、特に「戻り値」セクションと使用例を読むべきです。あなたの「固定」音は「壊れた」ように聞こえます。 – keltar

関連する問題