5

我想做一些简单的事情,比如使用 C 和 SDL 在屏幕上绘制一个正方形。我复制的示例不起作用。

//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 正确绘制正方形?

4

3 回答 3

5

SDL_FillRect不以 aSDL_Rect作为论据;它需要一个指向SDL_Rect.

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

这就是为什么当你用白色填充时你可以传递NULL给函数。NULL不是 type SDL_Rect,但它是一个指针,所以编译器可以使用它。

于 2013-11-01T17:32:18.813 回答
4

正如Zach Stark所提到的,SDL_FillRect不以 aSDL_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));
于 2013-11-18T22:00:49.417 回答
1

查看SDL_RenderDrawRect

于 2013-11-16T23:05:12.030 回答