繁体   English   中英

SDL - 获取原生屏幕分辨率

[英]SDL - Get native Screen Resolution

我的代码:

  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()之前执行此操作。 这就是它在构造函数中的原因。

在实际初始化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(); 尽你所能。 您将不得不稍微重构您的类窗口。

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

但是在调用它之前你仍然必须初始化视频子系统( SDL_Init(SDL_INIT_VIDEO) )。

我知道这已经过时了,但代码中存在一个很大的错误。

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

创建一个无名的Window实例,因此调用它的实例仍然会有未初始化的变量。 看起来您正在尝试使用委托构造函数,但在这种情况下,对其他构造函数的调用必须位于成员初始化列表中。 看到这个页面

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM