C++ Can';t使用SDL/C+打开窗口+;
我的代码出现了一个大错误,运行后无法打开游戏的第一个窗口!它只是空白打开几秒钟,然后自动关闭。我不知道我的代码出了什么问题,因为我正在学习一系列教程,我的代码看起来就像教程中的代码。这是我的密码:C++ Can';t使用SDL/C+打开窗口+;,c++,window,sdl,C++,Window,Sdl,我的代码出现了一个大错误,运行后无法打开游戏的第一个窗口!它只是空白打开几秒钟,然后自动关闭。我不知道我的代码出了什么问题,因为我正在学习一系列教程,我的代码看起来就像教程中的代码。这是我的密码: #include "stdafx.h" #include "FirstClass.h" FirstClass::FirstClass(void){ bool quit = false; window = NULL; window = SDL_CreateWindow("Snaykie v1.0"
#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);
}
}
#包括“stdafx.h”
#包括“头等舱.h”
第一类::第一类(无效){
bool-quit=false;
窗口=空;
窗口=SDL_创建窗口(“Snaykie v1.0”,显示350、150、800、500,SDL_窗口);
如果(窗口==NULL){
std::cout您处理evt
变量的方式不好。它已分配但未初始化,您将未初始化的值与SDL\u 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
函数,也许您根本就没有运行事件循环。非常感谢您,兄弟,它工作得非常好,但是缺少一个东西,“while(SDL\u PollEvent(&evt)!=SDL\u QUIT)”我已经修复了。@1devSDL\u PollEvent(&evt)!=SDL_QUIT
这是什么胡说八道?也许你应该读一下,尤其是“返回值”部分和用法示例。你的“修复”听起来更像是“破产”。