簡體   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