2015-02-08 96 views
-1

我有SDL lib的問題。我使用VS2012 Ultimate和我實際使用本教程:http://lazyfoo.net/tutorials/SDL/01_hello_SDL/index2.php設置的一切,我也一步一步幾次,但我仍然有問題,這是我的代碼,很簡單:'SDL_SetVideoMode':標識符未找到

#include <iostream> 
#include <SDL.h> 

SDL_Surface * ekran = NULL; 

int main (int argc, char *args []) 
{ 
    SDL_Init(SDL_INIT_EVERYTHING); 
    ekran = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE); 
    SDL_Flip(ekran); 
    SDL_Delay(2000); 
    SDL_Quit(); 
    return 0; 
} 

和IM有這個錯誤:

error C3861: 'SDL_SetVideoMode': identifier not found 
error C3861: 'SDL_Flip': identifier not found 
+0

什麼是您的編譯/鏈接線? – 2015-02-08 23:04:30

+0

您正在使用哪個版本的SDL? – Kaslai 2015-02-09 00:46:51

+2

我猜你安裝了SDL 2.0.3,版本1和2中的API差別很大。但是,lazyfoo.net也提供了有關版本2的指南。 – cbel 2015-02-09 01:04:51

回答

2

再看看那個教程頁。您的代碼與其不匹配(例如,SDL_SetVideoMode()不再存在)。您的代碼使用SDL 1.2,而(更新的)教程使用SDL 2.0。您是否使用該頁面的舊緩存版本?

1

下面是如何替換SDL2中的SDL_SetVideoMode()的示例。初始化SDL的方式已經過評論,並與新方法一起用於比較目的。基本上,SDL2創建一個帶有標題的窗口,然後創建一個表面,而SDL1創建一個表面,然後調用窗口管理器爲其命名。

if (SDL_Init(SDL_INIT_VIDEO) < 0) { 
    fprintf(stderr, "SDL video init failed: %s\n", SDL_GetError()); 
    return 1; 
} 

// SDL_Surface *screenSurface = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, 32, SDL_SWSURFACE); 

SDL_Window* window = NULL; 
SDL_Surface* screenSurface = NULL; 

window = SDL_CreateWindow("Sphere Rendering", 
    SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 
    SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN); 

if (window == NULL) { 
    fprintf(stderr, "Window could not be created: %s\n", SDL_GetError()); 
    return 1; 
} 

screenSurface = SDL_GetWindowSurface(window); 

if (!screenSurface) { 
    fprintf(stderr, "Screen surface could not be created: %s\n", SDL_GetError()); 
    SDL_Quit(); 
    return 1; 
} 

// SDL_WM_SetCaption("Sphere Rendering", NULL);