如何使用SDL 2.0绘制正方形?

And*_*rew 3 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));
Run Code Online (Sandbox Code Playgroud)

它可以正确地将屏幕填充为白色,但无法调用SDL_Rect:

error: expected expression before ‘SDL_Rect’
Run Code Online (Sandbox Code Playgroud)

如何使用SDL 2.0正确绘制正方形?

Zac*_*ark 5

SDL_FillRect不以a SDL_Rect为论点;它需要一个指针SDL_Rect。

//Create a square
SDL_Rect rect(0,0,100,100);
SDL_FillRect(screenSurface, &rect, SDL_MapRGB(...))
Run Code Online (Sandbox Code Playgroud)

这就是为什么当您填充白色时可以传递NULL给该函数的原因。NULL不是type SDL_Rect,而是指针,因此编译器可以使用。


And*_*rew 4

正如扎克·斯塔克(Zach Stark)所提到的,SDL_FillRect不以 anSDL_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));
Run Code Online (Sandbox Code Playgroud)