SDL - 获取本机屏幕分辨率(SDL - Get native Screen Resolutio

2019-08-17 21:27发布

我的代码:

  1. window.cpp

     Window::Window(int w, int h, const char *title, const char *icon) { height = h; width = w; if(SDL_Init( SDL_INIT_EVERYTHING ) == 0) { SDL_WM_SetCaption(title, NULL); SDL_WM_SetIcon(SDL_LoadBMP(icon),NULL); screen = SDL_SetVideoMode(width, height, 32, SDL_SWSURFACE | SDL_RESIZABLE | SDL_DOUBLEBUF); if(screen == NULL) { running = false; return; } fullscreen = false; } else running = false; return; } Window::Window() { const SDL_VideoInfo* info = SDL_GetVideoInfo(); screenWidth = info->current_w; screenHeight = info->current_h; Window(640, 480, "Flatgu game", "rsc/img/icon.bmp"); } 
  2. 在window.h

     class Window { public: Window(); ~Window(); int getWidth() {return width;} int getHeight() {return height;} bool isFullscreen() {return fullscreen;} void toggleFullscreen(); private: Window(int w, int h, const char *title, const char *icon); bool fullscreen, running; int height, width, screenWidth, screenHeight; SDL_Surface *screen; }; 

它编译罚款,但随后,编译后,我得到这个丑陋的错误:

什么是我的问题的原因是什么? 为什么会如此怪异的数字?

我的目标是存储原始的屏幕分辨率为进一步使用 (如切换到全屏 ),我有打电话之前要做到这一点SDL_SetVideoMode() 这就是为什么它是在构造函数中。

Answer 1:

你有真正初始化SDL之前调用SDL视频功能有问题。

SDL_Init( SDL_INIT_EVERYTHING )

一直被称为

SDL_GetVideoInfo(); 

在你的情况,你叫SDL_GetVideoInfo(); 第一

const SDL_VideoInfo* info = SDL_GetVideoInfo();   //<-- calls SDL_GetVideoInfo();   
screenWidth = info->current_w;
screenHeight = info->current_h;
Window(640, 480, "Flatgu game", "rsc/img/icon.bmp");    //<-- initializes SDL

因此,解决办法很简单; 拨打电话SDL_Init( SDL_INIT_EVERYTHING )立即在程序的开始,那么你可以调用SDL_GetVideoInfo(); 就像你喜欢的。 您将有小幅调整你的类窗口。



Answer 2:

为了获得最佳的视频模式调用SDL_GetVideoInfo设置视频(之前调用之前SDL_SetVideoMode )。

但你仍然有调用它(之前初始化视频子系统SDL_Init(SDL_INIT_VIDEO)



Answer 3:

我知道这是旧的,但有在代码中一个很大的错误。

Window(640, 480, "Flatgu game", "rsc/img/icon.bmp");

创建一个窗口的无名实例,以便调用它仍然有未初始化的变量实例。 它看起来像你试图使用委托构造函数,但在这种情况下,调用其他的构造函数必须在成员初始化列表。 请参阅此页 。



文章来源: SDL - Get native Screen Resolution