C++ SDL#U BlitSurface不';不要拉到屏幕上
我试图简单地创建一个窗口并将一个图像blit到屏幕上,但由于某些原因,图像没有显示,屏幕保持白色。为了解决这个问题,我一直在参考lazyfoo的教程。我在下面发布了我所有的代码,希望它足够可读。谢谢你的帮助,因为我在这件事上已经坚持了一两个小时了C++ SDL#U BlitSurface不';不要拉到屏幕上,c++,windows,visual-studio,sdl,sdl-2,C++,Windows,Visual Studio,Sdl,Sdl 2,我试图简单地创建一个窗口并将一个图像blit到屏幕上,但由于某些原因,图像没有显示,屏幕保持白色。为了解决这个问题,我一直在参考lazyfoo的教程。我在下面发布了我所有的代码,希望它足够可读。谢谢你的帮助,因为我在这件事上已经坚持了一两个小时了 #include <SDL.h> #include <SDL_audio.h> #include <cstdio> #include <iostream> #include <Windows.h&g
#include <SDL.h>
#include <SDL_audio.h>
#include <cstdio>
#include <iostream>
#include <Windows.h>
// creates Load_surface function
SDL_Surface *loadSurface(std::string path) {
SDL_Surface *loadedSurface = SDL_LoadBMP(path.c_str());
if (loadedSurface == NULL) {
printf("Unable to load image %s! SDL Error: %s\n", path.c_str(),
SDL_GetError());
}
return loadedSurface;
}
int main(int argc, char ** argv)
{
// pointer variable for window
SDL_Window *window;
SDL_Surface *surface = NULL;
SDL_Surface *media =
loadSurface("C:\\Users\\nickl\\Desktop\\buttonpressed.bmp");
// initialize and test for failure
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) == -1) {
return 1;
}
// create the window
window = SDL_CreateWindow(
"Ice Cream Boys Software",
48,
48,
640,
480,
SDL_WINDOW_OPENGL
);
// safety check, see if window was created, otherwise throw an error
if (window = NULL) {
printf("Could not create window: %s", SDL_GetError());
return 1;
}
else {
OutputDebugString(TEXT("Surface loaded.\n"));
surface = SDL_GetWindowSurface(window);
}
SDL_BlitSurface(media, NULL, surface, NULL);
SDL_UpdateWindowSurface(window);
/* ************************************** loop **************************** */
// bool to keep window open and event handler
bool quit = false;
SDL_Event e;
// loop to keep window open
while (!quit) {
while (SDL_PollEvent(&e) != 0) {
if (e.type == SDL_QUIT) {
quit = true;
}
else if (e.type == SDL_KEYDOWN) {
OutputDebugString(TEXT("My output string.\n"));
}
}
}
/* ************************************************************************** */
// close and destroy window
SDL_DestroyWindow(window);
// quit
SDL_Quit();
return 0;
}
#包括
#包括
#包括
#包括
#包括
//创建加载曲面函数
SDL_表面*加载表面(标准::字符串路径){
SDL_Surface*loadedSurface=SDL_LoadBMP(path.c_str());
如果(loadedSurface==NULL){
printf(“无法加载图像%s!SDL错误:%s\n”,path.c_str(),
SDL_GetError());
}
返回加载面;
}
int main(int argc,字符**argv)
{
//窗口的指针变量
SDL_窗口*窗口;
SDL_Surface*Surface=NULL;
SDL_表面*介质=
加载面(“C:\\Users\\nickl\\Desktop\\buttonpressed.bmp”);
//初始化并测试故障
如果(SDL_Init(SDL_Init_视频| SDL_Init_音频)=-1){
返回1;
}
//创建窗口
window=SDL\u CreateWindow(
“冰激凌男孩软件”,
48,
48,
640,
480,
SDL\u窗口\u OPENGL
);
//安全检查,查看是否创建了窗口,否则抛出错误
如果(窗口=NULL){
printf(“无法创建窗口:%s”,SDL_GetError());
返回1;
}
否则{
OutputDebugString(文本(“表面加载的。\n”));
表面=SDL_GetWindowSurface(窗口);
}
SDL_BlitSurface(介质、空、表面、空);
SDL_更新内表面(窗口);
/**************************************************************************************************************************/
//bool保持窗口打开和事件处理程序
bool-quit=false;
SDL_事件e;
//循环以保持窗口打开
而(!退出){
while(SDL_PollEvent(&e)!=0){
如果(e.type==SDL\u退出){
退出=真;
}
else if(e.type==SDL\u KEYDOWN){
OutputDebugString(文本(“我的输出字符串”。\n”);
}
}
}
/* ************************************************************************** */
//关闭并销毁窗口
SDL_窗口(窗口);
//退出
SDL_退出();
返回0;
}
如果您将0
传递给标志,而不是SDL\u WINDOW\u OPENGL
,是否有效SDL\u GetWindowSurface()
与OpenGL或SDL\u渲染器系统不兼容。另外,将SDL\u LoadBMP()
移动到SDL\u Init()
之后,在之前操作不会给我带来温暖的模糊感。在调用SDL\u GetWindowSurface()
之后,您是否验证了surface
是否为非NULL?您所说的我都做了。显然,即使在运行SDL\u GetWindowSurface()
之后,surface
仍然为空。谢谢代码有错误,if(Window=NULL)
,您的意思是Window==NULL
Oh,>。<谢谢。这解决了您的问题吗?如果您将0
传递给标志,而不是SDL\u Window\u OPENGL
,是否有效SDL\u GetWindowSurface()
与OpenGL或SDL\u渲染器系统不兼容。另外,将SDL\u LoadBMP()
移动到SDL\u Init()
之后,在之前操作不会给我带来温暖的模糊感。在调用SDL\u GetWindowSurface()
之后,您是否验证了surface
是否为非NULL?您所说的我都做了。显然,即使在运行SDL\u GetWindowSurface()
之后,surface
仍然为空。谢谢代码有错误,if(Window=NULL)
,您的意思是Window==NULL
Oh,>。<谢谢。这解决了您的问题吗?