滚动SDL2,即更改giu布局的积分坐标

问题描述

我正在尝试在SDL2中的应用程序中模拟“滚动”,但是我不认为每次滚动事件发生时在屏幕上移动每个对象都是一种有效/优雅的方法。我对SDL2的了解是,左上角的坐标始于0,0。对于我来说,实现起来更加容易,是否可以更改GUI的左上角起点,以便在我滚动时移动到0,100,下一次滚动在0,200等。我该怎么做?谢谢

解决方法

您可以创建偏移量变量,而不是更改对象本身的x,y位置或更改SDL的参考坐标(无法完成)。

例如,创建一个名为ViewPointOffset的SDL_Point:

SDL_Point ViewPointOffset;

最佳做法是将其放在您的窗口类中(如果有的话),或者甚至更好地放在属于窗口类成员的Camera类中。

然后,在绘制时,只需从绘制的x和y坐标中减去偏移量即可:

void draw(SDL_Renderer* renderer,const SDL_Point ViewPointOffset,SDL_Texture* tex,const SDL_Rect* srcrect,const SDL_Rect* dstrect){
    SDL_Rect* drawrect;
    drawrect->w = dstrect->w;
    drawrect->h = dstrect->h;
    drawrect->x = dstrect->x - ViewPortOffset.x;
    drawrect->y = dstrect->y - ViewPortOffset.y;
    SDL_RenderCopy(renderer,tex,srcrect,drawrect);
}

您可以创建第二个函数,或者将布尔值附加到该函数的输入,以允许您忽略偏移量。如果您有一个不希望应用偏移量的GUI按钮,该怎么办?

https://github.com/Helliaca/SDL2-Game是使用类似方法的小型开源游戏。您可以在base.cpp / .h

中找到此代码