滚动背景图像,不能隐藏接缝,c ++ raylib

Posted

技术标签:

【中文标题】滚动背景图像,不能隐藏接缝,c ++ raylib【英文标题】:scrolling background image, can't hide seams, c++ raylib 【发布时间】:2021-07-27 14:38:30 【问题描述】:

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

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

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

以下是它们如何分开而不是保持无缝的示例:

代码如下:

        #include "raylib.h"
    
    int main()
    
        //preamble
        const int windowW600;
        const int windowH380;
        float dt0;     // 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 bgScale0.5;
        const int bgQty2;
        float bgX0.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 bgPosbgX + ((bg.width * bgScale) * i), 0.0;
                Vector2 bgPos2bgX2 + ((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();
    

这是背景图片:

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于滚动背景图像,不能隐藏接缝,c ++ raylib的主要内容,如果未能解决你的问题,请参考以下文章

隐藏固定透明标题下的滚动内容,滚动背景

用图像作为背景隐藏文本块的效果!不透明度的线性梯度?

设置一个透明的滚动条,并在其后面显示背景图像

从类方法中清除 raylib 中的背景会使窗口闪烁

JS弹出层遮罩,隐藏背景页面滚动条细节优化

具有 100% 宽度的 CSS 背景图像和动画滚动直到图像完成