C++和SDL:SDL_Rect如何正常工作?

Lem*_*ons 4 c++ sdl

我正在研究一些SDL的东西,在尝试设置加载的BMP的位置时遇到了一些麻烦.

这是代码.

while(event.type != SDL_QUIT) //The game loop that does everything
{
    SDL_Rect *location;
    location = SDL_Rect(600,400,0,0);
    SDL_PollEvent(&event); //This "polls" the event
    //Drawing stuff goes here
    SDL_BlitSurface(zombie, NULL, buffer, &location);
    SDL_Flip(buffer); //Draw
}
Run Code Online (Sandbox Code Playgroud)

它不会编译.我究竟做错了什么?

Eug*_*nca 15

SDL是用C语言编写的,所以SDL_Rect它只是一个简单的结构.

要动态分配它,你必须使用,new否则编译器会将你的代码解释为对调用的常规函数​​的调用SDL_Rect,返回一个SDL_Rect*.
在这种情况下,我认为没有理由使用动态分配; 只需使用struct初始化语法(并注意struct的成员的声明顺序):

SDL_Rect location = {0,0,600,400}; // or
SDL_Rect location{0,0,600,400}; // for C++11 & up (h/t @HolyBlackCat)
Run Code Online (Sandbox Code Playgroud)

或明确初始化每个成员(如果某人决定重新排列结构成员的顺序,则更安全):

SDL_Rect location;
location.h = 600;
location.w = 400;
location.x = 0;
location.y = 0;
Run Code Online (Sandbox Code Playgroud)