C++ 无限平铺背景

C++ 无限平铺背景,c++,sdl,C++,Sdl,我试图在SDL中创建一个平铺背景,一个可以滚动并继续无限滚动的背景 所以,我想出了一些代码并进行了测试。它工作得很好,但只能沿x轴移动1920像素,沿Y轴移动1080像素 这是我的密码: void Background::render(SDL_Renderer *renderer){ int Xoffset = 0; int Yoffset = 0; for(int y = 0; (y * 411) < 1080; y++){ for(int x =

我试图在SDL中创建一个平铺背景,一个可以滚动并继续无限滚动的背景

所以,我想出了一些代码并进行了测试。它工作得很好,但只能沿x轴移动1920像素,沿Y轴移动1080像素

这是我的密码:

void Background::render(SDL_Renderer *renderer){
    int Xoffset = 0;
    int Yoffset = 0;
    for(int y = 0; (y * 411) < 1080; y++){
        for(int x = 0; (x * 405) < 1920; x++){
            Xoffset = 0;
            Yoffset = 0;
            if(GameManager::GetInstance().getGlobalX() + (405 * x) + 405 < 0){
                Xoffset = 1920;
            }
            if(GameManager::GetInstance().getGlobalY() + (411 * y) + 411 < 0){
                Yoffset = 1080;
            }
            SDL_Rect backRect = {GameManager::GetInstance().getGlobalX() + (405 * x) + Xoffset, GameManager::GetInstance().getGlobalY() + (411 * y) + Yoffset, 405, 411};
            SDL_RenderCopy(renderer, ResourceManager::GetInstance().getTexture("background"), 0, &backRect);
        }
    }
}
void Background::render(SDL_渲染器*渲染器){
int Xoffset=0;
int-Yoffset=0;
对于(int y=0;(y*411)<1080;y++){
对于(int x=0;(x*405)<1920;x++){
Xoffset=0;
Yoffset=0;
如果(GameManager::GetInstance().getGlobalX()+(405*x)+405<0){
Xoffset=1920;
}
如果(GameManager::GetInstance().getGlobalY()+(411*y)+411<0){
Yoffset=1080;
}
SDL_Rect backRect={GameManager::GetInstance().getGlobalX()+(405*x)+Xoffset,GameManager::GetInstance().getGlobalY()+(411*y)+Yoffset,405411};
SDL_RenderCopy(渲染器,ResourceManager::GetInstance().getTexture(“后台”)、0和backRect);
}
}
}

getGlobalX()和getGlobalY()是对象相对于播放器的位置。

您应该能够多次绘制1920x1080背景

算法看起来像这样

  • 从(-1920,0)开始绘制背景(完全脱离屏幕)
  • 绘制另一个背景副本,这次从(0,0)开始
  • 每一帧,将两个背景向右画一个像素,这样你会有一个滚动的错觉,从右边退出的背景的末端会从左边出来
  • 一旦您在步骤1中的背景达到(0,0),在(-1920,0)处绘制另一个背景并保持滚动

  • 所以基本上,你把两个背景推到右边,每次你需要的时候都把一个放在左边。这应该很容易编码。

    您应该能够多次绘制1920x1080背景

    算法看起来像这样

  • 从(-1920,0)开始绘制背景(完全脱离屏幕)
  • 绘制另一个背景副本,这次从(0,0)开始
  • 每一帧,将两个背景向右画一个像素,这样你会有一个滚动的错觉,从右边退出的背景的末端会从左边出来
  • 一旦您在步骤1中的背景达到(0,0),在(-1920,0)处绘制另一个背景并保持滚动

  • 所以基本上,你把两个背景推到右边,每次你需要的时候都把一个放在左边。这应该很容易编码。

    这显然和代码中对1920和1080的多个硬编码引用有关。。。你们是如何解决这个问题的?这显然和代码中对1920和1080的多个硬编码引用有关。。。你是如何解决这个问题的?