0

我试图让滚动背景在背景图像小于程序窗口的情况下工作。出于这个原因,我创建了一个 for 循环来移动两组相同的复制图像。

奇怪的是,两组图像不断地分开而不是保持在一起,无缝。

这是使用 C++ 和 raylib,但在四处搜索后我不确定这是 raylib 特定的问题。

以下是它们如何分开而不是保持无缝的示例: 接缝问题 几分钟后出现接缝问题

这是代码:

        #include "raylib.h"
    
    int main()
    {
        //preamble
        const int windowW{600};
        const int windowH{380};
        float dt{0};     // for use with delta time between frames
    
        SetTargetFPS(60);
        InitWindow(windowW, windowH, "walk");
    
        //backgrounds
        Texture2D bg = LoadTexture("textures/far-buildings.png"); // 256 X 192
        const float bgScale{0.5};
        const int bgQty{2};
        float bgX{0.0};
        float bgX2{(bg.width * bgScale * bgQty)};
    
        while (!WindowShouldClose())
        {
            //start drawing
            BeginDrawing();
            ClearBackground(WHITE);
    
            dt = GetFrameTime();
    
            bgX -= 250 * dt;
            bgX2 -= 250 * dt;
    
            if (bgX < -(bg.width * bgScale) * bgQty)
            {
                bgX = (bg.width * bgScale) * bgQty;
            }
            if (bgX2 < -(bg.width * bgScale) * bgQty)
            {
                bgX2 = (bg.width * bgScale) * bgQty;
            }
    
            for (int i = 0; i < bgQty; i++)
            {
                Vector2 bgPos{bgX + ((bg.width * bgScale) * i), 0.0};
                Vector2 bgPos2{bgX2 + ((bg.width * bgScale) * i), 0.0};
                DrawTextureEx(bg, bgPos, 0.0, bgScale, WHITE);
                DrawTextureEx(bg, bgPos2, 0.0, bgScale, WHITE);
            }
    
            DrawText(FormatText("dt: %f", dt), 3, windowH - 10, 10, GOLD);
            EndDrawing();
        }
        UnloadTexture(bg);
        CloseWindow();
    }

这是背景图片:

背景图片

4

1 回答 1

1

您使代码过于复杂。要获得重复,只需制作一个大于源图像的源矩形(UV 坐标),OpenGL 将重复它。将源矩形设置为与屏幕相同的大小,并在滚动时偏移源矩形原点。

这是一个简单的例子。 https://github.com/JeffM2501/TestFrame/discussions/12

于 2021-07-27T16:09:50.233 回答