SDL,为什么还有第二个屏幕
SDL, why is there a second screen?
在学习了c++的基础知识后,我决定快速进入图形库。我已经开始阅读教程,然后,就在几个小时前,凭借我所学到的一切,我决定写一些代码,只需要制作一个窗口并在上面画一些东西
#include "SDL.h"
#include <stdlib.h>
class images
{
public:
SDL_Window* OneW = NULL;
SDL_Surface* Screensurface = NULL;
SDL_Surface* dibujito = NULL;
int width = 600;
int height = 400;
bool init_sdl()
{
bool success = true;
if(SDL_Init(SDL_INIT_VIDEO) < 0)
{
success = false;
SDL_GetError();
}
else
OneW = SDL_CreateWindow("SDL File",SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,width,height,SDL_WINDOW_SHOWN);
if(OneW == NULL)
{
SDL_GetError();
}
else
{
Screensurface = SDL_GetWindowSurface(OneW);
}
return success;
}
bool loadmedia()
{
bool success = true;
dibujito = SDL_LoadBMP("Nazi.bmp");
if(dibujito == NULL)
{
SDL_GetError();
}
return success;
}
void close()
{
SDL_FreeSurface(dibujito);
SDL_DestroyWindow(OneW);
OneW = NULL;
SDL_Quit();
}
};
int main(int argc, char* argv[])
{
images project;
project.init_sdl();
if(!project.init_sdl())
{
SDL_GetError();
}
else
{
project.loadmedia();
}
if(!project.loadmedia())
{
SDL_GetError();
}
else
{
bool game_quit = false;
SDL_Event e;
while(!game_quit)
{
while(SDL_PollEvent(&e) != 0)
{
if(e.type == SDL_QUIT)
{
game_quit = true;
}
}
SDL_BlitSurface(project.dibujito,NULL,project.Screensurface,NULL);
SDL_UpdateWindowSurface(project.OneW);
}
}
project.close();
return 0;
}
这个程序运行得很好,它做了我想要的,但后来我意识到了一些东西。这个程序创建了第二个窗口,第一个窗口是黑色的,有图像,但第二个只是白色的,空的。
为什么会出现第二个窗口?此外,每当我运行程序并单击X按钮(SDL_QUIT)时,窗口都不会关闭。为什么会发生这种情况?
在确保只调用project.init_sdl()一次之后,应该有一个窗口,并且当您像这样调用project.close()时,应用程序应该关闭。事件处理也应该起作用。
相关文章:
- UE4-如何在给定4个屏幕坐标的情况下缩放纹理或材质
- 我有两个类需要在同一 cpp 文件中相互引用,但第一个类无法识别第二个类类型的对象
- 等待整个 omp 块完成,然后再调用第二个函数
- 我想在C++中读取一些多个字符,但它永远不会读取第二个字符
- 如何在创建自定义迭代器时获得 std::p air 的第一个和第二个?
- WinAPI 在单击第一个对话框上的按钮控件并销毁第一个对话框后创建第二个对话框
- 将第二个 GATT 服务添加到 Movesense 容器
- 如何在 c++ 中根据第二个元素按降序对列表进行排序
- 对的排序向量 (std::vector<pair<int, int>>) 按对的第一个元素搜索并更新第二个元素值
- 比较 2 个向量并从第二个向量中删除在第一个 - c++ 中找不到的元素
- 为什么这个程序没有打印返回的迭代器的正确第二个元素?
- 使第二个类的构造函数成为第一个类中的友元函数
- 为什么第二个代码给出了预期的结果,而第一个代码却没有?
- 为什么第一个代码块产生垃圾值,而第二个代码块将类成员的值相加?
- 打印无序映射的第二个元素,即集合
- 我有一个类,它创建了另一个类的实例.如何将变量通过第一个类传递到第二个类的实例化中?
- OpenGL - 添加第二个着色器属性会导致空白屏幕
- C / SFML:使用两个递归调用在屏幕上打印凸形形状仅显示第一个递归调用中的形状,而不是第二个
- 如何截取第二个屏幕显示器的屏幕截图
- SDL,为什么还有第二个屏幕