2013-11-01 100 views
3

我想做一些簡單的事情,比如使用C和SDL在屏幕上畫一個正方形。我複製的示例不起作用。如何用SDL 2.0繪製正方形?

//Get window surface 
SDL_Surface *screenSurface = SDL_GetWindowSurface(window); 

//Fill the surface white 
SDL_FillRect(screenSurface, NULL, SDL_MapRGB(screenSurface->format, 0xFF, 0xFF, 0xFF)); 

//create a square 
SDL_FillRect(screenSurface, SDL_Rect(0,0,100,100), SDL_MapRGB(screenSurface->format, 0x00, 0x00, 0x00)); 

它正確地填滿整個屏幕的白色,但未能在調用SDL_Rect

error: expected expression before ‘SDL_Rect’ 

如何正確繪製使用SDL 2.0平方?

回答

2

Zach Stark所述,SDL_FillRect並不以SDL_Rect爲參數。相反,它需要一個指向SDL_Rect的指針。通過在&符號前加上變量(&),只傳遞一個引用(指針)到原始變量。但是,我無法讓Zach的代碼示例在我的C程序中工作。以下使用不同的語法來創建SDL_Rect,但它適用於我。

// create a black square 
SDL_Rect rect = {0, 0, 100, 100}; // x, y, width, height 
SDL_FillRect(screenSurface, &rect, SDL_MapRGB(screenSurface->format, 0x00, 0x00, 0x00)); 
4

SDL_FillRect不以SDL_Rect爲參數;它需要一個指向SDL_Rect的指針。

//Create a square 
SDL_Rect rect(0,0,100,100); 
SDL_FillRect(screenSurface, &rect, SDL_MapRGB(...)) 

這就是爲什麼當你用白色填充時,你可以通過NULL函數。 NULL不是SDL_Rect類型,但是它是一個指針,所以編譯器對它很好。

+0

啊,好的。 '&'和'*'有什麼區別? – Andrew

+0

另外,我得到'rect(0,0,100,100)'的錯誤:'錯誤:期望的聲明說明符或'...'在數字常量之前。這是在C中創建SDL_Rect的方式嗎? – Andrew

+1

@Andrew聲明時,'*'表示變量是*指針*,'&'表示它是*引用*。在一個已經聲明的變量上,'*'表示變量(指針)指向*的值,'&'指示變量*的地址。這些都是非常基本的C/C++的東西;在深入SDL之前,我建議您更好地理解這些概念。 – talles