SDL无限平铺背景

时间:2016-06-06 21:06:14

标签: 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 = 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);
        }
    }
}

getGlobalX()和getGlobalY()是对象应该相对于玩家的位置。

1 个答案:

答案 0 :(得分:2)

您应该可以多次绘制1920x1080背景。

算法看起来像这样。

  1. 从(-1920,0)开始绘制背景(完全在屏幕外)
  2. 绘制背景的另一个副本,这次从(0,0)开始。
  3. 每一帧,两个背景都向右画一个像素,所以你会有一个滚动错觉,右边的背景末端将从左边出来。
  4. 一旦您在步骤1的背景变为(0,0),请在(-1920,0)处绘制另一个背景并继续滚动。
  5. 所以基本上,你向右推两个背景,并在每次需要时保持一个在左边。这应该很容易编码。