如何用SDL 2.0画一个正方形?

时间:2013-11-01 16:25:07

标签: c sdl sdl-2

我想做一些简单的事情,比如使用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正确绘制正方形?

3 个答案:

答案 0 :(得分:5)

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类型,但它是一个指针,因此编译器可以正常使用它。

答案 1 :(得分:3)

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));

答案 2 :(得分:1)