我敢肯定这根本不是意外,我可能误会了一些东西。我试图这样调用一个重载的构造函数:SDL_RenderCopy(SDL_Renderer*, SDL_Texture*, SDL_Rect*, SDL_Rect*);
当我在类中创建一个静态方法来检索SDL_Rect指针时,问题就来了:
static SDL_Rect* getRectangle(rect r) {
SDL_Rect rectangle{ r.x, r.y, r.w, r.h };
return &rectangle;
}
所以调用就像:
SDL_Rect* r = MyClass::getRectangle(srcRect);
SDL_Rect* r2 = MyClass::getRectangle(destRect);
SDL_RenderCopy(renderer, texture, r, r2);
它们都是指针,并且返回一致的值,但是由于某种原因,我不理解,当我从类中获取的矩形传递给SDL时,它们没有根据矩形的值进行缩放。但是,如果我更改静态方法以返回
SDL_Rect
的副本,那么一切都会按预期进行,如下所示:static SDL_Rect getRectangle(rect r) {
SDL_Rect rectangle{ r.x, r.y, r.w, r.h };
return rectangle;
}
并致电:
SDL_Rect r = Video::getRectangle(srcRect);
SDL_Rect r2 = Video::getRectangle(destRect);
SDL_RenderCopy(renderer, texture, &r, &r2);
最佳答案
问题出在您的函数getRectangle()
中:
static SDL_Rect* getRectangle(rect r) {
SDL_Rect rectangle{ r.x, r.y, r.w, r.h };
return &rectangle;
}
您正在返回对象的地址
rectangle
,该地址具有自动存储期限。因此,控件从函数返回后,该对象不存在。您可能要在堆上分配
SDL_Rect
并返回其地址:static SDL_Rect* getRectangle(rect r) {
return new SDL_Rect{ r.x, r.y, r.w, r.h };
}
关于c++ - SDL_RenderCopy()异常行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61252914/